Tkinter, как и большинство инструментов GUI, управляется событиями.Вам просто нужно создать функцию, которая удаляет старый экран и создает новый, а затем делает это в ответ на событие (нажатие кнопки, таймер и т. Д.).
Использование вашего первого примера canvas
В первом примере вы хотите автоматически переключать страницы через две секунды.Это можно сделать с помощью after
, чтобы запланировать запуск функции по истечении времени ожидания.Тогда нужно просто переместить логику перерисовки в функцию.
Например:
def set_programState(new_state):
global programState
programState = new_state
refresh()
def refresh():
canvas.delete("all")
if(programState == 0):
backgroundImage = PhotoImage(file="image.gif")
canvas.create_image(0,0, image=backgroundImage, anchor=NW);
canvas.after(2000, set_programState, 1)
elif(programState == 1):
...
Использование объектов Python
Возможно, лучшим решением будет сделать каждую страницубыть классом на основе виджета.Это позволяет легко добавлять или удалять все сразу, добавляя или удаляя этот один виджет (потому что уничтожение виджета также уничтожает все его дочерние элементы)
Тогда это просто вопрос удаления старого объекта и создания экземплярановый.Вы можете создать отображение номера состояния на имя класса, если вам нравится концепция, управляемая состоянием, и использовать это отображение, чтобы определить, какой класс нужно создать.
Например:
class ThisPage(tk.Frame):
def __init__(self):
<code to create everything for this page>
class ThatPage(tk.Frame):
def __init__(self):
<code to create everything for this page>
page_map = {0: ThisPage, 1: ThatPage}
current_page = None
...
def refresh():
global current_page
if current_page:
current_page.destroy()
new_page_class = page_map[programstate]
current_page = new_page_class()
current_page.pack(fill="both", expand=True)
приведенный выше код несколько неудачен, но, надеюсь, он иллюстрирует базовую технику.
Как и в первом примере, вы можете вызывать update()
из любого события: нажатия кнопки, таймера или любого другого события, поддерживаемого tkinter.Например, чтобы связать клавишу escape, чтобы всегда переводить вас в исходное состояние, вы можете сделать что-то вроде этого:
def reset_state(event):
global programState
programState = 0
refresh()
root.bind("<Escape>", reset_state)