gpt4 book ai didi

python - Tkinter - 切换到不同页面时如何重置网格行配置

转载 作者:行者123 更新时间:2023-12-01 08:39:56 25 4
gpt4 key购买 nike

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

运行代码时,将看到一个开始屏幕,其中有一个欢迎标签 (row=0) 和一个登录按钮 (row=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. 根据您的主要要求。由于您想要恢复原始屏幕,因此您必须 .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()

关于python - Tkinter - 切换到不同页面时如何重置网格行配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53559895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com