我从教程中获得了以下代码。然后我修改了main()
,以便创建两个窗口作为单独的线程。当我运行它时,只创建一个窗口。然后,当我按下该窗口中的Quit
按钮时,会出现第二个窗口。在这个新窗口中,按钮具有与第一个不同的外观(我更喜欢的外观)然后如果我按下两个Quit
按钮中的任何一个,则两个窗口都关闭并且程序退出。
为什么第二个窗口在按下第一个Quit
按钮之前不会出现,为什么它出现时看起来会有所不同?
编辑:当没有使用线程时也会发生这种情况,一次只创建一个窗口。
编辑:这是创建的两个窗口的屏幕截图。左边的那个是在程序运行时创建的,右边的那个是在单击第一个上的“退出”按钮后创建的。
from Tkinter import Tk, BOTH
from ttk import Frame, Button, Style
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("Quit button")
self.style = Style()
self.style.theme_use("default")
self.pack(fill=BOTH, expand=1)
quitButton = Button(self, text="Quit",
command=self.quit)
quitButton.place(x=50, y=50)
from threading import Thread
def main():
for i in range(2):
root = Tk()
root.geometry("250x150+300+300")
app = Example(root)
Thread(target=root.mainloop()).start()
if __name__ == '__main__':
main()
答案 0 :(得分:1)
你不能这样使用tkinter。 Tkinter不是线程安全的,除了从创建根窗口的线程外,您只能访问tk小部件和命令。
至于一个窗口只显示另一个窗口,即使没有线程也被破坏,很难说因为你没有显示代码。如果您要创建多个Tk
实例,并多次调用mainloop
,那就是问题所在。当您精确创建Tk
的一个实例时,Tkinter可以正常工作,并且只需调用mainloop
一次。
如果您需要多个窗口,请为第一个窗口创建一个Tk
实例,为其他窗口创建Toplevel
个实例。