gpt4 book ai didi

Python Tkinter Checkbutton 问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:12 25 4
gpt4 key购买 nike

我有两个非常简单的复选按钮,我将它们的变量保存在一个列表 (varss) 中,还有一个按钮。但我不明白为什么当我调用 var_states(通过按下按钮)时,我无法获得关闭/打开值。任何帮助表示赞赏。谢谢!

from Tkinter import *

def run():
# create the root and the canvas
root = Tk()
canvas = Canvas(root, width=300, height=200)
canvas.pack()
class Struct: pass
canvas.data = Struct()
# canvas.data.givenIngredients = set()

prefInput(canvas)
# and launch the app
root.mainloop()

def var_states(varss):
for var in varss:
var.get()

def prefInput(canvas):
master = Tk()
var1, var2 = IntVar(), IntVar()
Checkbutton(master, text="male", variable=var1).grid(row=1, sticky=W)
varss = [var1, var2]
Checkbutton(master, text="female", variable=var2).grid(row=2, sticky=W)
Button(master, text='Show', command=lambda:var_states(varss)).grid(row=4, sticky=W, pady=4)

run()

最佳答案

您已经创建了两个 Tcl 解释器,一个用于每次调用 Tk()。每个 Tcl 解释器都有不同于其他所有 Tcl 解释器的变量。

创建的第一个解释器成为 Tkinter 对象的默认解释器,该对象没有明确地将自身与现有解释器相关联(例如,通过将该解释器中的小部件传递给其构造函数中的“主”)

你可能不打算创建两个解释器,所以对于初学者来说不要执行

master = Tk()

在prefInput中。相反,使用 canvas 参数作为您的 Checkbutton 调用的第一个参数(替换 master),并在对 IntVar 的调用中使用它: var1, var2 = IntVar(canvas), IntVar(canvas)。 (如果你确实想要在你的应用程序中有一个额外的窗口,请使用 Tkinter.Toplevel 而不是 Tkinter.Tk 作为第二个窗口)

最后,为了测试,我更改了您的 Var_states 函数,以便它打印更多信息:

def var_states(varss):
print "var_states", varss
for var in varss:
print var, var.get()

最后的程序是这样的:

from Tkinter import *

def run():
# create the root and the canvas
root = Tk()
canvas = Canvas(root, width=300, height=200)
canvas.pack()
class Struct: pass
canvas.data = Struct()
# canvas.data.givenIngredients = set()

prefInput(canvas)
# and launch the app
root.mainloop()

def var_states(varss):
print "var_states", varss
for var in varss:
print var, var.get()

def prefInput(canvas):
var1, var2 = IntVar(canvas), IntVar(canvas)
Checkbutton(canvas, text="male", variable=var1).grid(row=1, sticky=W)
varss = [var1, var2]
Checkbutton(canvas, text="female", variable=var2).grid(row=2, sticky=W)
Button(canvas, text='Show', command=lambda:var_states(varss)).grid(row=4, sticky=W, pady=4)

run()

关于Python Tkinter Checkbutton 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com