Python Tkinter For Loop Widget寻址

时间:2018-03-26 01:40:03

标签: python loops for-loop tkinter widget

我正在练习使用for循环在Python中创建Tkinter小部件。但是如果在某些情况下我需要解决在for循环下创建的小部件,我该怎么做呢?

另外,我对以下for循环实际如何工作感到困惑,因为看起来只有一个单选按钮对象创建了三个具有不同属性的副本。有人可以解释我们可以创建三个实例的相同对象名称背后的逻辑吗?

import tkinter as tk

#Window definition    
win = tk.Tk()
win.geometry("500x500")

#Radio Button Globals
colors = ["Blue", "Gold", "Red"]

#Radio Button click action
def radCall():
    radSEL = radVar.get()
    if radSEL == 0:
        win.configure(background=COLOR1)
    elif radSEL == 1:
        win.configure(background=COLOR2)
    elif radSEL == 2:
        win.configure(background=COLOR3)   

#Radio Button    
radVar = tk.IntVar() #Radio Button Variable
radVar.set(99) #Select non existened value

for col in range(3):
       rad = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)
       rad.grid(column=col, row=5, sticky=tk.W)

win.mainloop()

1 个答案:

答案 0 :(得分:0)

每次循环时都会重新分配rad变量,但是,tkinter每次循环都会创建一个新的radiobutton。它们都使用相同的变量radVar,这使它们隐含相关。它们都具有不同的value属性,因此这使它们配置为可以作为单选按钮组使用。

要回答关于如何在创建后与按钮交互的问题,通常建议创建一个字典来保存小部件。例如,可以按如下方式重新构造循环,以便以后访问单选按钮。

radio = {}
for col in colors:
    radio[col] = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)
    radio[col].grid(column=col, row=5, sticky=tk.W)

# Then later you can reconfigure a radiobutton text or something
radio['Red'].configure(text='New text on radio button')