【发布时间】:2025-12-03 08:05:02
【问题描述】:
由于某种原因,我的 Checkbutton 变量代码在函数内部时不会更改工作,但是,在函数外部和自己的脚本中时它可以工作。这是函数外部的代码
from tkinter import *
basket = ['apple','banana','orange']
win2 = Tk()
buttons = []
variables = []
for fruit in basket:
variable = BooleanVar()
checkbutton = Checkbutton(win2, text = fruit,variable = variable).pack()
variables.append(variable)
buttons.append(checkbutton)
Button(win2, text='Quit', command=win2.destroy).pack()
Button(win2, text='Peek', command=allstates).pack()
mainloop()
这是在函数内部定义的代码
from tkinter import *
def selectfruit():
def allstates():
for variable in variables:
print(variable.get())
basket = ['apple','banana','orange']
win2 = Tk()
print(stls)
buttons = []
variables = []
for fruit in basket:
variable = BooleanVar()
checkbutton = Checkbutton(win2, text = fruit,variable = variable).pack(side = TOP)
variables.append(variable)
buttons.append(checkbutton)
Button(win2, text='Quit', command=win2.destroy).pack()
Button(win2, text='Peek', command=allstates).pack()
对于代码的顶部,当我选中一个框时,变量变为 True。对于最底层的,无论我做什么,他们都停留在 False。
【问题讨论】:
-
win2 = Tk()令人担忧 - 这是否意味着您在程序的其他地方调用了Tk()?这会导致变量不起作用 - 以及许多其他问题。使用Toplevel()创建额外的窗口。 -
在@jasonharper 建议之后,为什么不尝试将
variable = BooleanVar()更改为var1 = BooleanVar()之类的,参数名称和变量名称相同,可能会引起一些混乱 -
@jasonharper 是的,我一直在这个程序中使用多个窗口。我将它切换到 Toplevel 而不是 Tk() 并且它起作用了。您能解释一下为什么多个窗口会导致程序出现问题吗?我认为这会很好,因为它们是单独的类
-
调用
Tk()不仅仅是给你一个窗口——它创建了一个完全独立的GUI 环境。在一个环境中创建的变量、图像等根本无法被不同环境中的小部件访问。 -
我明白了。非常感谢!