Tkinter - Как сбросить настройки строк сетки при переходе на другую страницу - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть следующая минимальная программа для описания моей проблемы.

При запуске кода вы получите стартовый экран с меткой Welcome (строка = 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()

Я считаю, что то, что я спрашиваю, понятно, т.е. я хочу, чтобы мой исходный стартовый экран вернулся.Итак, есть ли способ сбросить любую такую ​​конфигурацию или как мне это сделать?

PS Изменение строки кнопки входа в систему, чтобы сказать, 2, решило бы мою проблему, но я полагаю, что это будетхак.

1 Ответ

0 голосов
/ 30 ноября 2018
  1. По вашему основному запросу.Поскольку вы хотите вернуть исходный экран, вам придется .withdraw() открыть окно и вызвать его с помощью .deiconify()

  2. Как сказал Итан Филд, ваш код выдает ошибку (то же, что он опубликовалвыше).Не знаю, как вы можете запустить его, но мне пришлось изменить 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()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...