2016-11-27 3 views
0

forループ内にラジオボタンを作成しています。 1つのボタンですべての値をリセットすることができます(基本的に最初から調査を再開する)ので、私は 'self.info.buttons = []'を作成し、各ラジオボタンをこのリストに追加しました。しかし、私が試して、未回答のためにデフォルト値 '-1'にリセットすると、最初の&の4番目のオプションが選択され、グループ化されてしまいます。情報()と呼ばれるクラス内forループで作成されたtkinterラジオボタンをデフォルト値にリセットします。

def askQuestions(self): 
    file = open('questions.txt') 
    questionlist = file.readlines() 
    for number, question in enumerate(questionlist, 1): 
     self.var = tk.IntVar(value = -1) 
     width = 5 
     line = '{:5}'.format(number, fill=' ') + ' : ' + question.strip() 
     label = tk.Label(self, text=line) 
     label.grid(row=number, column = 0, sticky=tk.W) 
     options = ['?', 'No', 'Maybe', 'Yes'] 
     for answer in range(-1,3): 
      button = tk.Radiobutton(self, borderwidth=10, variable = self.var, text=options[answer+1], width = 5, value = answer, indicatoron=0) 
      button.grid(row = number, column = answer+2) 
     self.info.buttons.append(button) # List containing radiobuttons 
     self.info.answers.append(self.var) 

...値をリセット機能....

:私は、Pythonプログラミング、またはTkinterの長い、それがあるされていない

def resetFields(self): 
    self.name.set(value = '') #these work 
    self.dob.set(value = '') 
    for count, button in enumerate(self.buttons): 
     self.buttons[count].config(value = -1) # nothing I have tried works. 

おそらく初歩的な間違いですが、私は考えることができるすべてを試しました。ソースはここにあります:https://github.com/inyoka/sand おそらく、私はちょうど 'destroy'edフォームをし、それを再作成する必要がありますか?変数をリセットするのは、私が始めたときのほうが簡単でした。どんな援助も感謝して受け取りました。

+0

self.buttonsは 'info'クラスの中にあり、他の関数は絶望的なクラスなので、self.info.buttonsを使ってアクセスします。質問を編集してより明確にする。 – Inyoka

答えて

2

self.buttonsには、答えを保持しないオブジェクトがあります。Button() の回答はself.answersにあります。だからself.answersをリセットする必要があります。ところで

:あなたはあまりにもself.answersその後、buttons変化状態をリセットするとenumerate

def resetFields(self): 
    self.name.set(value='') 
    self.dob.set(value='') 

    for a in self.answers: 
     a.set(value=-1) 

を使用する必要はありません。

+0

素晴らしいです、それは今働きます。私は、私が解決策から遠く離れていくにつれて、これ以上作業していたと思います。ありがとう、本当にありがとうございます。 – Inyoka

関連する問題