将列表元素分配给循环中的标签

问题描述 投票:0回答:2

尝试在循环中将列表元素分配给标签,有 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()`
python for-loop label
2个回答
0
投票

您可以在循环中创建标签列表,而不是使用名为

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) 

0
投票

使用字典的示例:

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'}

然后可以使用按键访问这些值。

© www.soinside.com 2019 - 2024. All rights reserved.