更改Checkbutton状态时,tkinter变量不会更改

时间:2015-03-14 10:44:33

标签: python checkbox tkinter

我有一个窗口,打开另一个窗口询问设置。但我用来获取Checkbutton状态的BooleanVar不会改变。但是,当我从没有其他窗口的代码调用settingswindow strait时,它会这样做。

这是获取

的最小代码
from tkinter import *


class MainWindow():

    def __init__(self, master):

        self.root = master
        SettingsWindow()
        self.root.mainloop()

class SettingsWindow():

    def __init__(self):
        rootSettings = Tk()

        self.rebuild = BooleanVar()
        chkRebuild = Checkbutton(rootSettings, text="rebuild", variable=self.rebuild, command=self.testFunc)
        chkRebuild.pack()

        rootSettings.mainloop()

    def testFunc(self):
        print(self.rebuild.get())

root = Tk()
mainWindow = MainWindow(root)

单击checkbutton时输出始终为0,另外BooleanVar的输出为True或False。

调用SettingsWindow()在课堂上或外面打电话有什么不同?至少我认为这是它不起作用的原因。

我正在使用Pyhton3以防万一。

2 个答案:

答案 0 :(得分:0)

您不能拥有Tk的两个实例。对于第二个窗口,您需要创建Toplevel。您也不应该在整个计划中多次拨打mainloop

答案 1 :(得分:0)

这是如何解决不改变问题的checkbutton变量的示例。 键:对于第二个窗口,应该使用Toplevel,而不是使用Tk。

from tkinter import *

class MainWindow:
    def __init__(self):
        self.master = Tk()
        self.fun = dict()

    def set_ui(self):
        Button(self.master, text='SecondWindow', command=self.fun).pack(side=LEFT)

        self.master.mainloop()


class SecondWindow:
    def __init__(self):
        self.root = Toplevel()
        self.var = BooleanVar()
        self.set_ui()

    def printf(self):
        print(self.var.get())

    def set_ui(self):
        Checkbutton(self.root, text='press', variable=self.var, command=self.printf).pack(side=LEFT)


def call_second_window():
    second_window = SecondWindow()


main_window = MainWindow()
main_window.fun = call_second_window
main_window.set_ui()