Я пробую простой эксперимент, у меня 3 кадра, у кадра 1 есть две метки - «для страницы 2» и «для страницы 3», у него также есть 2 переключателя, соответствующие этикетки. на основе которой радио-кнопка выбрана, когда пользователь нажимает на кнопку следующую страницу, я хочу кнопку, чтобы привести пользователя к выбранной страницеизменение фреймов на основе ответа радиокнопки
это код -
import Tkinter as tk
class MainApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
# the main container that holds all the frames
container = tk.Frame(self)
container.pack(side = "top", fill = "both", expand = True)
container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0,weight = 1)
self.frames = {}
# adding frames to the dictionary
for F in (Page1,Page2,Page3):
frame = F(container,self)
self.frames[F] = frame
frame.grid(row = 0, column = 0, sticky = "w")
self.show_frame(Page1)
def show_frame(self,page_name):
#SHOWS A FRAME WITH THE GIVEN NAME
for frame in self.frames.values():
frame.grid_remove()
frame = self.frames[page_name]
frame.grid()
#STACKING THE FRAMES
#frame = self.frames[cont]
#frame.tkraise()
class Page1(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
lbl1 = tk.Label(self,text = "for page 2",font =("Helvetica",12,"bold"))
lbl1.grid(row=1,sticky="W")
lbl2 = tk.Label(self,text = "for page 3",font =("Helvetica",12,"bold"))
lbl2.grid(row=1,column=1,sticky="W")
btn1 = tk.Button(self, text="next page", font=('MS', 24, 'bold'))
btn1.grid(row=3,column = 0,columnspan=1)
#btn1['command'] = lambda: controller.show_frame(Page2)
self.var1 = tk.BooleanVar()
rButton1 = tk.Radiobutton(self,variable = self.var1,value=True)
rButton1.grid(row=2,sticky = "W")
rButton2 = tk.Radiobutton(self,variable = self.var1,value=False)
rButton2.grid(row=2,column=1,sticky = "W")
if self.var1.get() == 1:
btn1['command'] = lambda: controller.show_frame(Page3)
if self.var1.get() == 0:
btn1['command'] = lambda: controller.show_frame(Page2)
class Page2(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
lbl = tk.Label(self,text="This is page 2",font=("Helvetica",12,"bold"))
lbl.pack()
class Page3(tk.Frame):
def __init__(self,parent,controller):
tk.Frame.__init__(self,parent)
lbl = tk.Label(self,text="This is page 3",font=("Helvetica",12,"bold"))
lbl.pack()
app = MainApp()
app.mainloop()
Я предположил, что с помощью несколько основных условий (расположенных в моем классе PageOne) -
self.var1 = tk.BooleanVar()
rButton1 = tk.Radiobutton(self,variable = self.var1,value=True)
rButton1.grid(row=2,sticky = "W")
rButton2 = tk.Radiobutton(self,variable = self.var1,value=False)
rButton2.grid(row=2,column=1,sticky = "W")
if self.var1.get() == 1:
btn1['command'] = lambda: controller.show_frame(Page3)
if self.var1.get() == 0:
btn1['command'] = lambda: controller.show_frame(Page2)
я смог бы добиться этого, но это не похоже на работу. Условия в моих операторах if являются целыми числами, но, насколько мне известно, 1 означает True и 0; В любом случае, ложно? Что я делаю не так?
Это не совсем работа, дает мне это - если не self.var1.get(): AttributeError: экземпляр Стр.1 не имеет атрибута «контроллер» – Treeno1
звучит как вы не установили 'self.controller = контроллер'. Попробуйте скопировать/вставить код выше, если вы этого еще не сделали? – Pythonista
в идеале, я бы по-прежнему хотел, чтобы кнопка «Следующая страница» сохранила свою функциональность. Я сделал это так, потому что я намерен использовать его в более крупном проекте, примерно так: вопросник с 10 вопросами, каждый из которых имеет соответствующую кнопку «Да» и «Нет». После заполнения вопросника, как только они нажмут кнопку «Следующая страница», я хочу, чтобы отображался конкретный фрейм, соответствующий кадр будет заполнен текстом, в качестве примера, который может прочитать текст: «Основываясь на ваших вариантах, это ваша рекомендация ... » – Treeno1