我有一个窗口,打开另一个窗口询问设置。但我用来获取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以防万一。
答案 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()