关闭和重新打开窗口时,多个tkinter窗口看起来不同

时间:2014-01-28 04:25:09

标签: python tkinter

我从教程中获得了以下代码。然后我修改了main(),以便创建两个窗口作为单独的线程。当我运行它时,只创建一个窗口。然后,当我按下该窗口中的Quit按钮时,会出现第二个窗口。在这个新窗口中,按钮具有与第一个不同的外观(我更喜欢的外观)然后如果我按下两个Quit按钮中的任何一个,则两个窗口都关闭并且程序退出。

为什么第二个窗口在按下第一个Quit按钮之前不会出现,为什么它出现时看起来会有所不同?

编辑:当没有使用线程时也会发生这种情况,一次只创建一个窗口。

编辑:这是创建的两个窗口的屏幕截图。左边的那个是在程序运行时创建的,右边的那个是在单击第一个上的“退出”按钮后创建的。 enter image description here

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

1 个答案:

答案 0 :(得分:1)

你不能这样使用tkinter。 Tkinter不是线程安全的,除了从创建根窗口的线程外,您只能访问tk小部件和命令。

至于一个窗口只显示另一个窗口,即使没有线程也被破坏,很难说因为你没有显示代码。如果您要创建多个Tk实例,并多次调用mainloop,那就是问题所在。当您精确创建Tk的一个实例时,Tkinter可以正常工作,并且只需调用mainloop一次。

如果您需要多个窗口,请为第一个窗口创建一个Tk实例,为其他窗口创建Toplevel个实例。