Python Tkinter Checkbutton问题

2024-10-01 15:38:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个非常简单的复选按钮,它们的变量我保存在一个列表(vars)中,还有一个按钮。但我不明白为什么当我调用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()

Tags: thetextmastervardefroot按钮grid
1条回答
网友
1楼 · 发布于 2024-10-01 15:38:17

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

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

您可能不打算创建两个解释程序,所以首先不会执行

master = Tk()

在预输入中。相反,使用canvas参数作为Checkbutton调用的第一个参数(替换master),并在对IntVar:var1, var2 = IntVar(canvas), IntVar(canvas)的调用中使用它。(如果您确实希望在应用程序中增加一个窗口,请使用Tkinter.顶层而不是Tkinter.Tk.塔卡对于第二个窗口)

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

^{pr2}$

最后的程序是:

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()

相关问题 更多 >

    热门问题