Basit bir denemeyi deniyorum, 3 çerçevem var, 1. karede iki etiket var - "sayfa 2 için" ve "sayfa 3 için", aynı zamanda 2 etiketler.Radyo düğmesi yanıtına göre değişen kareler yanıtı
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()
Ben kullanarak farz - kullanıcının bir sonraki sayfa düğmesini çarptığında seçildiği hangi radyo düğmesi dayalı, ben seçilmiş sayfa
bu kullanıcıyı getirmek için düğmeye istediğiniz koddur (benim PageOne sınıfında bulunan) bir kaç temel koşullar -
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)
bunu başarmak mümkün olacaktır, ancak işe görünmüyor. If ifadelerimdeki koşullar tamsayılar ama benim için 1 doğru ve 0; Yine de yanlış mı? Neyi yanlış yapıyorum?
O bu beni oldukça değil iş verir vermez -() self.var1.get değilse: AttributeError: Sayfası1 örneği yok niteliği 'denetleyicisi' Eğer 'self.controller kurmadı gibi – Treeno1
sesler vardır = denetleyici. Henüz yapmadıysanız kodun yukarısına kopyalamayı/yapıştırma yapmayı deneyin. – Pythonista
ideal olarak, "Sonraki Sayfa" düğmesinin işlevselliğini koruyabilmesini isterim. Bu şekilde yaptım çünkü daha büyük bir projede kullanmayı düşünüyorum, bunun gibi bir şey: her biri karşılık gelen bir "Evet" ve "Hayır" radyo düğmesine sahip 10 soru içeren bir anket. Anketi tamamladıktan sonra, "Sonraki sayfa" düğmesine bastıklarında, belirli bir karenin görüntülenmesini istediğimde, söz konusu karenin metne eklenmesi, metnin okuyabileceği bir örnek olarak, "Seçimlerinize dayanarak, bu sizin tavsiyenizdir. ... " – Treeno1