2017-09-12 6 views
-1
class questions(tkinter.Tk): 

    def __init__(self, *args, **kwargs): 
     tkinter.Tk__init__(self, *args, **kwargs) 
     container = tkinter.Frame(self) 
     container.pack(side='top', fill='both', expand=True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 
     self.frames = {} 

     for F in (StartPage, QuestionOne, QuestionTwo) 
       frame = F(container, self) 
       self.frames[F] = frame 
       frame.grid(row = 0, column= 0, sticky='nsew') 
     self.show_frame(StartPage) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 

    def show_choice(self, cont) 
     global pr_var 
     global x 
     questions.pr_var = x.get() 
     var_list[0]= questions.pr_var 
     print('pr_var = ' + str(questions.pr_var)) ## i print it to check 
     frame= self.frames[QuestionOne] 
     frame.tkraise() 

class Startpage(tkinter.Frame): 

    def __init__(self, parent, controller): 
     tkinter.Frame.__init__(self, parent) 
     label= tkinter.Label(self, text='Hello', font= LARGE_FONT) 
     label.pack(pady=10, padx=10) 
     button=ttk.Button(self, text='Start', command= Lambda:controller.show_frame(QuestionOne)) 
     button.pack() 

class QuestionOne(tk.Frame): 

    def __init__(self, parent, controller): 
     tkinter.Frame.__init__(self, parent) 
     label= tkinter.Label(self, text='How many pieces?', font= LARGE_FONT) 
     label.grid(row= 3, column=1, pady=10, padx=50) 
     global x 
     self.radio_num= tkinter.IntVar() 
     x = self.radio_num 
     self.rb1 = tkinter.Radiobutton(self, text='one', variable=self.radio_num, value=1) 
     self.rb2 = tkinter.Radiobutton(self, text='two', variable=self.radio_num, value=2) 
     self.rb1.grid(row=5, column=0, padx=10) 
     self.rb2.grid(row=6, column=0, padx=10) 
     button1=ttk.Button(self, text='Next', command= Lambda:controller.show_choice(self)) 
     button2=ttk.Button(self, text='back', command= Lambda:controller.show_frame(StartPage)) 
     button1.grid(row=25, column=1, padx=10, pady=50) 
     button2.grid(row=25, column=0, padx=10, pady=50) 

class QuestionTwo(tkinter.Frame): 

    def __init__(self, parent, controller): 
     tkinter.Frame.__init__(self, parent) 
     label= tkinter.Label(self, text='So you have ' +str(var_list[0]) + ' piece(s)', font= LARGE_FONT) ## here is the problem 
     label.grid(row= 3, column=1, pady=10, padx=50) 
     global x 
     global pr_var 
     button1=ttk.Button(self, text='back', command= Lambda:controller.show_frame(QuestionOne)) 
     button1.grid(row=25, column=1, padx=10, pady=50) 

app=questions() 
app.mainloop() 

私は現在プログラムを作成しています。私は少し助けていただきたいと思います。 私は一般的なプログラミングではかなり新しいですので、患者にしてください。:-)クラスのインスタンスを変数として(クラスの外に)変数として保存するPython

私は、ユーザーからいくつかの変数を受け取り、それらを処理するプログラムを作成しました。必要)。次に、いくつかの質問が出され、ユーザーからの入力が変数として保存されるGUIを作成し始めました。これらの質問の最後に、すべての変数が保存され、処理プログラムから使用されます。

私はどこにいるのですか?変数を保存できません。

私は最初のクラスはの形でメインフレームを保持するためのクラスGui..where使用しています:

def __init__(self, *args, **kwargs) 

と私が使用してすべてのページのために、私は新しいクラス(新しいフレーム)を作成参照をプライマリクラスに

ここで問題となるのは、たとえば、ユーザーが初めてラジオボタンを選択した場合、その値は「コマンド」で(すべての新しいページが常に参照する)プライマリクラスのメソッドから計算され、このメソッドの内部では、計算後に値を出力します(正しく保存されているかどうかを確認するために)。ここまでは大丈夫です。

私の問題は、私はグローバル変数としてクラスのインスタンスを作ってみました、それはプライマリのみclass..afterのメソッド内で動作します...私は3ページに保存された変数を使用する場合、それは仕事をdoesntの

です私は別のクラス(別のページでは意味する)で使用したいときはうまくいきません。 私はClassA.variableとして参照しようとしましたが、どちらも動作しませんでした。私は変数をinitメソッドの中でNoneを定義しようとします(そうでなければ、 '変数'は定義されていません) 2ページ目から計算されていますが、3ページ目で変数をtkinterのラベル内の文字列の形にしたい場合は、グローバル変数になっていましたが、値は得られます...私は非常に混乱しています

私の主な目標は、ユーザーがラジオボタンで与える予定の変数でリストを作成することです。このリストは、処理プログラムが簡単にアクセスするためにリストの外になければなりません。

は私がリストを作るtoo..toことを試みたが、私はリストを参照したときに[0](最初の変数のためにたとえば、私が範囲外のこと...リストインデックスを取得

どのように私がすることができますクラスのインスタンスを取得し、変数としてリストコンポーネントにそれらを回す??

PS:変数が整数でないか、例えば、クラスのインスタンスへの参照がstrings..theある......

list[0] = x.get() 

グローバルxと

self.radio_num =tkinter. IntVar() 

x= self.radio_num 

PS2:誰かが私の問題がある正確に理解できるように、私はすべてを正しく説明している場合、私は知りません...ない場合

+0

コードのコピーを提供できますか? –

+0

私はちょうどコードの一部をアップロードしました。私は今、私の問題が理解しやすいことを願っています – GeorgM

答えて

-1

:-)とにかく

いずれかの方法のおかげで、必要に応じて、私はいくつかのコードをアップロードすることができ、あなたのモジュールの開始時にクラスの名前のリストを作成します。保存したいクラスの__init__()機能で は、置く:

global classes 
classes.append(self) 

これは、あなたが属性として変数にアクセスできるようになります。

+0

あなたは私にそれを行う方法を教えてくださいできますか?私はリストをShow_choiceのメソッドの中でグローバルにしようとしましたが、それでもページ2で動作しません – GeorgM

+0

リストを実装する方法を説明するために答えを明確にしました。 –

+0

あなたの助けてくれてありがとう、しかし、私はまだそれを働かせることはできません。まず、誰かがそれを追加するときに間違っていないとすれば、リストにコンテンツを追加し、ユーザーがプッシュバックし、後で適切な場所になるだろう。私は、変数が常に正しいインデックスに保存されるという意味で、挿入メソッドが安全であると思う。第二に、正確にあなたが私に言ったようにそれをタイプしました。良いニュースは、私がもうリストから変数を使用するときはNoneですが、それは正しい答えが '1'にな​​る.58345200.72500432のような番号を与えます。 – GeorgM

関連する問題