use*_*024 1 python checkbox tkinter button
我有两个非常简单的检查按钮,其变量我保存在列表(varss)和一个按钮.但是我不明白为什么当我调用var_states(通过按下按钮)时,我无法获得off/on值.任何帮助表示赞赏.谢谢!
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()
Run Code Online (Sandbox Code Playgroud)
小智 5
您已经创建了两个Tcl解释器,每个解释器都有一个Tk()
.每个Tcl解释器都有与每个其他Tcl解释器不同的变量.
创建的第一个解释器成为Tkinter对象的默认解释器,该对象没有明确地将自身与现有解释器相关联(例如,通过将该解释器中的窗口小部件传递给其构造函数中的"master")
您可能不打算创建两个解释器,因此对于初学者不执行
master = Tk()
Run Code Online (Sandbox Code Playgroud)
在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()
Run Code Online (Sandbox Code Playgroud)
最终的节目如下:
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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
744 次 |
最近记录: |