[英]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.