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

tkinter variable does not change when changing Checkbutton state

我有一个 Window 打开另一个 window 设置询问。但是我用来获取 Checkbutton 状态的 BooleanVar 并没有改变。但是,当我在没有其他 window.

的情况下从代码调用设置 window 海峡时,它确实如此

这是获取

的最少代码
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)

当点击复选按钮时输出总是0,即使BooleanVar的输出是True或False。

从 class 站点内或外部调用 SettingsWindow() 有何不同?至少我认为这是它不起作用的原因。

我正在使用 Pyhton3 以防有差异。

您不能有两个 Tk。对于第二个 window,您需要创建一个 Toplevel。您也不应该在整个程序中多次调用 mainloop

这是一个示例,说明如何解决复选按钮的变量未更改问题。 关键:对于第二个 window,应该使用 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()