簡體   English   中英

Python Tkinter 和 GUI

[英]Python Tkinter and GUI

我正在嘗試創建一個具有一個操作按鈕的程序/窗口。 單擊此按鈕時,應打開第二個程序/窗口並關閉前一個程序。 第二個程序應該有一個操作按鈕,可以打開第一個程序並關閉第二個程序。

我從另一個用戶那里找到了這個腳本,它的工作方式與我希望代碼運行的方式相同。 但是,在創建 otherframe 時,根窗口只是被 deconify() 隱藏了。

創建otherframe時銷毀根窗口的最佳方法是什么並且仍然能夠循環返回。

希望這是有道理的,並提前致謝。

import Tkinter as Tk

########################################################################
class OtherFrame(Tk.Toplevel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        Tk.Toplevel.__init__(self)
        self.geometry("100x100")
        self.title("otherFrame")

    ########################################################################
    class MyApp(object):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        self.root = parent
        self.root.title("Main frame")
        self.frame = Tk.Frame(parent)
        self.frame.pack()

        btn = Tk.Button(self.frame, text="Open Frame", command=self.openFrame)
        btn.pack()

    #----------------------------------------------------------------------
    def hide(self):
        """"""
        self.root.withdraw()

    #----------------------------------------------------------------------
    def openFrame(self):
        """"""
        self.hide()
        subFrame = OtherFrame()
        handler = lambda: self.onCloseOtherFrame(subFrame)
        btn = Tk.Button(subFrame, text="Close", command=handler)
        btn.pack()

    #----------------------------------------------------------------------
    def onCloseOtherFrame(self, otherFrame):
        """"""
        otherFrame.destroy()
        self.show()

    #----------------------------------------------------------------------
    def show(self):
        """"""
        self.root.update()
        self.root.deiconify()


#----------------------------------------------------------------------
if __name__ == "__main__":
    root = Tk.Tk()
    root.geometry("800x600")
    app = MyApp(root)
    root.mainloop()

沒有最好的方法來銷毀根窗口然后再把它找回來。 只有一種方法可以銷毀它,即調用destroy()方法。 當你這樣做時,所有子窗口都將被銷毀, mainloop將退出。

雖然可以銷毀和重新創建根窗口,但這不是 tkinter 的設計方式,它不會像您期望的那樣運行。 例如, StringVar等的所有實例都將被銷毀。 另一方面,您必須有一個根窗口,因此通過銷毀根窗口,您將銷毀其所有子窗口,包括Toplevel

到目前為止,最常見的情況是簡單地隱藏根窗口。 如果您真的想銷毀每個窗口,請不要在根窗口中放置任何內容並將其隱藏。 然后,您可以使用Toplevel實例,您可以輕松地隨意銷毀和重新創建這些實例。

簡短的回答......你做不到。 您已經擁有的腳本是最好的選擇。

嘗試這個:

import tkinter
class abc:
    def __init__(self):
        self.root = tkinter.Tk()
        tkinter.Button(self.root, text="Click Me", command=lambda:abc.com(self)).pack()
    def com(self):
        self.root.destroy()
        some = abc()

q = abc()

這實際上並沒有在兩者之間跳轉,而是每次都會創建一個新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM