Python 关闭和重新打开窗口时,多个tkinter窗口看起来不同
我从教程中获得了以下代码。然后我修改了Python 关闭和重新打开窗口时,多个tkinter窗口看起来不同,python,tkinter,Python,Tkinter,我从教程中获得了以下代码。然后我修改了main(),以便将两个窗口创建为单独的线程。当我运行它时,只创建了一个窗口。然后,当我按下该窗口中的退出按钮时,会出现第二个窗口。在这个新窗口中,按钮的外观与第一个不同(我更喜欢这个外观),然后如果我按下两个Quit按钮中的任何一个,两个窗口都将关闭,程序将退出 为什么第二个窗口在第一个退出按钮按下后才出现,为什么它出现时看起来不同 编辑:当没有使用线程时也会发生这种情况,一次只创建一个窗口 编辑:这是创建的两个窗口的屏幕截图。左边的一个是在程序运行时创建
main()
,以便将两个窗口创建为单独的线程。当我运行它时,只创建了一个窗口。然后,当我按下该窗口中的退出按钮时,会出现第二个窗口。在这个新窗口中,按钮的外观与第一个不同(我更喜欢这个外观),然后如果我按下两个Quit
按钮中的任何一个,两个窗口都将关闭,程序将退出
为什么第二个窗口在第一个退出
按钮按下后才出现,为什么它出现时看起来不同
编辑:当没有使用线程时也会发生这种情况,一次只创建一个窗口
编辑:这是创建的两个窗口的屏幕截图。左边的一个是在程序运行时创建的,右边的一个是在单击第一个按钮上的“退出”按钮后创建的。
你不能这样使用tkinter。Tkinter不是线程安全的,您只能从创建根窗口的线程访问tk小部件和命令 至于一个窗口在另一个窗口被破坏后才显示,即使没有线程,也很难说,因为您没有显示代码。如果要创建多个
Tk
实例,并多次调用mainloop
,这就是问题所在。Tkinter被设计为在您精确地创建一个Tk
实例,并精确地调用mainloop
一次时工作
如果需要多个窗口,请为第一个窗口创建一个
Tk
实例,为其他窗口创建Toplevel
实例。谢谢,我现在了解Toplevel。不过,我确实展示了代码。都在那里。我还对出现的第二个窗口的样式为何不同感兴趣,因为我更喜欢这种样式。@chewsocks:您是否在mac上运行代码?mac上的“default”
主题不是很漂亮,所以也许你只需要删除主题\u use()
调用。我实际上在Windows 7上。我在原始帖子中添加了一张图片和一个描述,展示了这两种风格。#chewsocks:你有没有尝试过简单地删除主题_use()
call?现在它们看起来都一样了。谢谢
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()