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



我有下面的最小程序来描述我的问题。

在运行代码时,将获得一个开始屏幕,其中有一个欢迎标签(行=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()

我相信我的要求是明确的,即我想回到我原来的开始屏幕。那么,有没有办法重置任何这样的配置,或者我应该如何进行?

第页。S.将登录按钮的行改为2,可以解决我的问题,但我认为这将是一个破解。

  1. 根据您的主要请求。由于您想要返回原始屏幕,您必须.withdraw()窗口并用.deiconify()调用它

  2. 正如EthanField所说,您的代码出现了一个错误(与他在上面发布的代码相同(。不知道你是如何运行它的,但我不得不将你的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()
    

最新更新