私は3つのフレームを持っています。フレーム1には2つのラベルがあります - "ページ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:あなたは 'self.controllerを設定しなかったようPage1のインスタンスには属性「コントローラの – Treeno1
が鳴りなかったです=コントローラ '。まだコードをコピーしていない場合は、上のコードを貼り付けてみてください。 – Pythonista
理想的には、「次のページ」ボタンにその機能を保持させたいと思っています。私はこのようにしました。なぜなら、もっと大きなプロジェクトで使うつもりなので、10個の質問のアンケートとそれぞれ対応する「はい」と「いいえ」のラジオボタンがあります。アンケートを完了したら、「次のページ」ボタンを押すと特定のフレームが表示され、フレームにはテキストが挿入されます。たとえば、選択肢に基づいて、これがあなたのお勧めです... " – Treeno1