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