Форум сайта python.su
Добрый день!
Я делаю интерфейс в Tkinter. У меня есть такая задача: сделать панель с кнопками сверху и несколько блоков с Text, Entry и некоторыми другими стандартными виджетами снизу. При этом я хочу, чтобы панель с кнопками была статичной, а фрейм снизу с указанными выше виджетами можно было бы обновить с другим количеством виджетов. При этом я не хочу полностью перерисовывать нижний фрейм. Если бы это был Toplevel, я бы мог просто использовать методы withdraw и deiconify, чтобы скрыть один фрейм и показать другой. Но Toplevel, насколько я понимаю, всегда рисуется как обособленное окно, а не часть виджета. Пожалуйста, предложите, как можно изменить Toplevel под данную задачу или что можно использовать вместо него.
Как вариант, есть методы lift и lower, для которых я использовал следующий код:
#!/usr/bin/python3 import tkinter as tk class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.frame = tk.Frame(self) self.frame.pack(side="top", fill="both", expand=True) self.label = tk.Label(self, text="Hello, world") button1 = tk.Button(self, text="Click to hide label",command=self.hide_label) button2 = tk.Button(self, text="Click to show label",command=self.show_label) self.label.pack(in_=self.frame) button1.pack(in_=self.frame) button2.pack(in_=self.frame) def show_label(self, event=None): self.label.lift(self.frame) def hide_label(self, event=None): self.label.lower(self.frame) if __name__ == "__main__": app = SampleApp() app.mainloop()
Офлайн
Я делал фрейм и потом скрывал его, если это было необходимо. Т.е. фактически у меня был набор фреймов при нажатии на кнопку все скрывались, а один отображался.
Офлайн
4kpt_IVДа, это то что нужно. Но какие методы используются для скрытия и отображения фрейма? withdraw/deiconify на нем не работают.
Я делал фрейм и потом скрывал его, если это было необходимо. Т.е. фактически у меня был набор фреймов при нажатии на кнопку все скрывались, а один отображался.
Офлайн
Зависит от метода упаковки этих фреймов. Каждый метод упаковки имеет собственный метод для сокрытия Каким пользуетесь Вы?
Офлайн
4kpt_IVpack().
Зависит от метода упаковки этих фреймов. Каждый метод упаковки имеет собственный метод для сокрытия Каким пользуетесь Вы?
Офлайн
Офлайн
4kpt_IVДа, действительно, спасибо. Я почему-то думал, что оно работает как destroy.
pack_forget()
Офлайн
Он вообще должен автоматом подстраиваться под размеры внутренних виджетов. Не пойму вопроса.
Офлайн
4kpt_IV
Разобрался. У меня есть обертка для Tk, где в ненужном месте вызывалось update_idletasks, видимо, из-за чего фрейм и не менял размер.
Офлайн