我正在练习使用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()
答案 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')