销毁登录页窗口并打开新的

2024-04-18 08:44:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试关闭一个窗口,同时创建一个新窗口。输入登录名后,将运行以下函数。在菜单页(窗口)打开时,您对如何关闭此窗口有何建议?你知道吗

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

Tags: 函数fromimportuiifistkinterdef
1条回答
网友
1楼 · 发布于 2024-04-18 08:44:51

您好,欢迎来到StackOverflow。你知道吗

你的主要问题是你的类LoginPage。 在类的__init__内初始化Tk()。一旦这个对象被销毁,Tkinter实例也会被销毁。你知道吗

考虑使用以下方法:

  1. 创建一个主小部件(例如,基于ToplevelTk
  2. 基于主窗口小部件内的Frame创建登录页
  3. 尝试登录后,销毁LoginPage并创建另一个Frame保存新数据。(菜单页)

使用这种方法,Tkinter主实例一直在运行,您可以删除或向其中添加对象/小部件。你知道吗

如果您不使用MainWidget(应该持久化)作为Tk实例,那么将使用一个“未命名”实例。或者使用Tk()作为登录页的父级,但不要将其嵌入其中。你知道吗

伪代码示例:

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("&ltLoginEvent>", 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("&ltLoginEvent>")

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(即grid/pack/place)。本文档显示了相应的接口。你知道吗

相关问题 更多 >