尝试在循环中将列表元素分配给标签,有 6 个元素和 6 个标签。 如果我明确分配标签,我就可以让它工作,但必须有一种更简洁的方法,但我目前还无法理解。 :-( 代码如下
import tkinter as tk
import random as rand
window = tk.Tk()
def gen_nums():
my_rand = sorted(rand.sample(range(1,49), 6))
for x in range(0, 6):
my_str = lbl_value+str(x)
my_str = str(my_rand[x])
"""
lbl_value0["text"] = str(my_rand[0])
lbl_value1["text"] = str(my_rand[1])
lbl_value2["text"] = str(my_rand[2])
lbl_value3["text"] = str(my_rand[3])
lbl_value4["text"] = str(my_rand[4])
lbl_value5["text"] = str(my_rand[5])
"""
window.rowconfigure([0, 1,2,3,4,5,6], minsize = 50, )
window.columnconfigure(0, minsize = 150, )
window.rowconfigure([0,1,2,3,4,5,6], minsize = 50, )
window.columnconfigure(0, minsize = 20, )
btn_gen = tk.Button(master=window,
width = 20,
font = "arial",
text = "Generate a set",
command = gen_nums,
fg = "red",
bg = "white")
btn_gen.grid(row=0, column=0, sticky="news")
lbl_value0 = tk.Label(master=window, text = " ")
lbl_value1 = tk.Label(master=window, text = " ")
lbl_value2 = tk.Label(master=window, text = " ")
lbl_value3 = tk.Label(master=window, text = " ")
lbl_value4 = tk.Label(master=window, text = " ")
lbl_value5 = tk.Label(master=window, text = " ")
lbl_value0.grid(row=1, column=0, sticky = "news")
lbl_value1.grid(row=2, column=0, sticky = "news")
lbl_value2.grid(row=3, column=0, sticky = "news")
lbl_value3.grid(row=4, column=0, sticky = "news")
lbl_value4.grid(row=5, column=0, sticky = "news")
lbl_value5.grid(row=6, column=0, sticky = "news")
window.mainloop()`
您可以在循环中创建标签列表,而不是使用名为
lbl_value0
等的单独变量:
num_labels = 6
labels_list = []
for i in range(num_labels):
lbl = tk.Label(master=window, text = " ")
lbl.grid(row=i+1, column=0, sticky = "news")
labels_list.append(lbl)
那么你的
gen_nums
函数也可以使用循环。内置的 zip
提供了一种选择相应标签和随机值对的便捷方法:
def gen_nums():
my_rand = sorted(rand.sample(range(1,49), num_labels))
for lbl, val in zip(labels_list, my_rand):
lbl["text"] = str(val)
使用字典的示例:
import random as rand
my_dict = {}
def gen_nums():
my_rand = sorted(rand.sample(range(1,49), 6))
for x in range(0, 6):
my_dict["lbl_value"+str(x)] = str(my_rand[x])
gen_nums()
print(my_dict)
给出(例如):
{'lbl_value0': '2',
'lbl_value1': '3',
'lbl_value2': '9',
'lbl_value3': '11',
'lbl_value4': '18',
'lbl_value5': '45'}
然后可以使用按键访问这些值。