我试图在创建新窗口时关闭窗口。输入登录后,将运行以下功能。在MenuPage(窗口)打开时,您对如何关闭此窗口有任何建议吗?
from tkinter import *
class LoginPage():
def __init__(self):
window = Tk()
#UI to retrieve login details
#While loop when submit is clicked.
if UserLogins:
#Maybe here a close window function is ran
window = Toplevel()
start= MenuPage(window)
else:
print('Incorrect Login')
class MenuPage(object):
#Menu UI
if __name__ == '__main__':
LoginPage()
答案 0 :(得分:0)
您好,欢迎来到 StackOverflow 。
您的主要问题是您的班级LoginPage
。
您会在班级的Tk()
内初始化__init__
。一旦该对象被销毁,Tkinter实例也会被销毁。
考虑使用以下方法:
Toplevel
或Tk
)Frame
LoginPage
并创建另一个Frame
来保存新数据。 (MenuPage)使用此方法,您的Tkinter主实例始终运行,并删除或添加对象/小部件。
如果您不使用MainWidget
(应该保留)作为Tk-Instance,那么"未命名"将使用实例。或者使用Tk()
作为您的LoginPage的Parent,但不要将其嵌入其中。
伪代码示例:
import tkinter as tk
class MainWidget(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__()
self.__load_widgets()
def __load_widgets(self):
self.page = LoginPage(self)
self.page.bind("<LoginEvent>", self.show_menu)
self.page.grid(sticky=tk.NW+tk.SE)
def show_menu(self, event=None):
self.page.destroy()
self.page=MenuPage(self)
self.page.grid(sticky=tk.NW+tk.SE)
class LoginPage(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
def raise_login_result(self):
""" some event may raise the event you can use from main widget to bind to """
# ...
raise("<LoginEvent>")
class MenuPage(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
if __name__ == "__main__":
app = MainWidget()
app.mainloop()
修改的
当您的问题扩展到几何管理器时,我在此引用一个相应的documentation on geometry managers(例如网格/包/地点)。本文档显示了相应的接口。