Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关闭和重新打开窗口时,多个tkinter窗口看起来不同_Python_Tkinter - Fatal编程技术网

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()