Имеется небольшая тестовая программа, по своей сути набросок будущего опросника, основанная на фреймах. В тестовом варианте есть три фрейма, кнопки длаее и назад.
Как по задумке это должно работать: каждый фрейм будет включать в себя вопрос (в виде label-метки с текстом) и ответ (в виде combobox с вариантами ответов). Пользователь выбирает вариант ответа -> нажимает кнопку далее -> в зависимости от варианта ответа появляется нужный фрейм. Соответственно при нажатии на кнопку назад происходит откат к фрейму с вопросом, с которого пользователь перешел на вопрос от которого откатился назад.
Как можно реализовать такой механизм переходов?
Код тестового приложения:
from tkinter import *
from tkinter import ttk
import tkinter as tk
from tkinter import Tk, RIGHT, BOTH, GROOVE, FLAT
from tkinter.ttk import Frame, Button, Style
app = tk.Tk()
width = 800
height = 600
x = int((app.winfo_screenwidth() / 2) - (width / 2))
y = int((app.winfo_screenheight() / 2) - (height / 2))
app.geometry(f'{width}x{height}+{x}+{y}')
app.resizable(width=False, height=False)
mine_frame = Frame(app, relief=GROOVE, borderwidth=1)
mine_frame.pack(fill=BOTH, expand=True, padx=88, pady=100)
def fwd_frame():
value_0 = slt_value_0.get()
if value_0 == '1':
value_1()
if value_0 == '2':
value_2()
def value_1():
value_0_frame.forget()
value_2_frame.forget()
def value_2():
value_1_frame.forget()
value_0_frame.forget()
#----------------------------------------------------------------------------------------------FRAME 0
value_0_frame = Frame(mine_frame, relief=FLAT, borderwidth=1)
value_0_frame.pack(fill=BOTH, expand=True, padx=200, pady=150)
lbl_value_0 = tk.Label(value_0_frame, text='Select value 1:', font=('Tahoma', 8), justify='left',
foreground='#ffffff', background='#5050A1')
lbl_value_0.pack(padx=2, pady=10)
slt_value_0 = ttk.Combobox(value_0_frame, values=['1', '2'])
slt_value_0.pack(padx=2, pady=10)
#----------------------------------------------------------------------------------------------FRAME 1
value_1_frame = Frame(mine_frame, relief=FLAT, borderwidth=1)
value_1_frame.pack(fill=BOTH, expand=True, padx=200, pady=150)
lbl_value_1 = tk.Label(value_1_frame, text='Select value 2:', font=('Tahoma', 8), justify='left',
foreground='#ffffff', background='#5050A1')
lbl_value_1.pack(padx=2, pady=10)
slt_value_1 = ttk.Combobox(value_1_frame, values=['2', '3'])
slt_value_1.pack(padx=2, pady=10)
#----------------------------------------------------------------------------------------------FRAME 2
value_2_frame = Frame(mine_frame, relief=FLAT, borderwidth=1)
value_2_frame.pack(fill=BOTH, expand=True, padx=200, pady=150)
lbl_value_2 = tk.Label(value_2_frame, text='Select value 3:', font=('Tahoma', 8), justify='left',
foreground='#ffffff', background='#5050A1')
lbl_value_2.pack(padx=2, pady=10)
slt_value_2 = ttk.Combobox(value_2_frame, values=['3', '4'])
slt_value_2.pack(padx=2, pady=10)
#----------------------------------------------------------------------------------------------BUTTONS
btn_01 = ttk.Button(app, text='>', command=fwd_frame)
btn_01.place(x=710, y=299, height=401, width=80, anchor='w')
btn_02 = ttk.Button(app, text='<')
btn_02.place(x=10, y=299, height=401, width=80, anchor='w')
app.mainloop()