代码之家  ›  专栏  ›  技术社区  ›  Miraj50 user2991863

Tkinter-切换到其他页面时如何重置网格行配置

  •  1
  • Miraj50 user2991863  · 技术社区  · 7 年前

    我有以下最低限度的计划来描述我的问题。

    在运行代码时,会出现一个启动屏幕,其中有一个 标签(行=0)和登录按钮(行=1)。当一 登录 他/她将进入带有注销按钮(第0行)和文本框(第1行)的主屏幕。我想要 只有 grid_rowconfigure(1, weight=1)

    注销 这个 grid_rowconfigure 配置仍然存在,并且启动屏幕已损坏。

    import tkinter as tk
    
    class example(tk.Tk):
        def __init__(self):
            super().__init__()
            self.start()
    
        def start(self):
            tk.Label(text='Welcome').grid(row=0, column=0)
            tk.Button(text='Login', command=self.home).grid(row=1, column=0)
    
        def home(self):
            self.clear_widgets()
            self.attributes('-zoomed', True) #Full Screen
            self.grid_rowconfigure(1, weight=1)
            tk.Button(text='Logout', command=self.logout).grid(row=0, column=0)
            tk.Text().grid(row=1, column=0, sticky="ns")
    
        def logout(self):
            self.attributes('-zoomed', False) #Back to original
            self.clear_widgets()
            self.start()
    
        def clear_widgets(self):
            for widget in self.winfo_children():
                widget.destroy()
    
    example().mainloop()
    

    另外,将登录按钮的行改为2可以解决我的问题,但我相信这是一个黑客行为。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Samuel Kazeem Aishwarya Shukla    7 年前
    1. 根据你的主要要求。既然你想恢复原来的屏幕,你就必须 .withdraw() .deiconify()

    2. 正如Ethan Field所说,您的代码给出了一个错误(与他在上面发布的相同)。我不知道你是如何运行它的,但我不得不改变你的 self.attributes('-zoomed', True) self.state('zoomed')

      import tkinter as tk
      
      class example(tk.Tk):
          def __init__(self):
               super().__init__()
               self.start()
      
         def start(self):
               tk.Label(text='Welcome').grid(row=0, column=0)
               tk.Button(text='Login', command=self.home).grid(row=1, column=0)
      
         def home(self):
               self.clear_widgets()
               self.state('zoomed') #Full Screen
               self.grid_rowconfigure(1, weight=1)
               tk.Button(text='Logout', command=self.logout).grid(row=0, column=0)
               tk.Text().grid(row=1, column=0, sticky="ns")
      
         def logout(self):
               #self.state('zoomed') #Back to original
               self.clear_widgets()
               self.withdraw()
               self.deiconify()
               self.start()
      
         def clear_widgets(self):
               for widget in self.winfo_children():
                    widget.destroy()
      
      example().mainloop()