2016-08-18 12 views
0

私はTkinterでいくつかのことを試みています。 私のアプリでは、ユーザーがドロップダウンリストから1つのオプションを選択します。この選択に基づいて、私はラジオボタンのリストを設定したいと思う。私は、ドロップダウンリストに値を入れるリストとラジオボタンの辞書を作成しました。コードを確認してください。ラジオボタンを正しく設定できません - Tkinter

は、いくつかの作業ではなく作業の例は以下を参照してください。 enter image description here

あなたが写真から見ることができるように。最初のウィンドウはうまくいきます。第二に。しかし、3番目のウィンドウは正しくありません。オプション「410」が残ります。私はアプリケーションを終了せずにその後の選択をしています。

おそらく私は正しい場所で変数を宣言していないと思います。ある人がコードを見て修正することができれば非常に役に立ちます。

コード:

from Tkinter import * 
    import ttk 


    class App(Frame): 

     def __init__(self,parent): 
      Frame.__init__(self) 
      self.parent = parent 
      self.v = IntVar() 
      #self.radio_value = [] 
      #self.i = 0 
      self.GUI() 


     def GUI(self): 

      self.master.title('Example') 
      self.pack(fill = BOTH, expand = 1) 
      self.options = ['a1','a2','a3','a4','a5'] 
      self.box_value = StringVar() 
      self.box = ttk.Combobox(self, textvariable=self.box_value) 
      self.box.bind("<<ComboboxSelected>>", self.set_Radio) 
      self.box['values'] = self.options 
      self.box.current(0) 
      self.box.grid(row = 0, column = 0 ) 

      self.choices = {'a1':['30', '70', '140', '410'], 'a2': ['a', 'b', 'c'], 'a3': ['x', 'y', 'z'], 'a4':['p', 'q', 'r'], 'a5': ['l', 'm', 'n']} 

     def set_Radio(self,parent): 

      i = 0 
      radio_value = [] 
      if self.box_value.get() in self.choices.keys(): 
       radio_value = self.choices[self.box_value.get()] 
      print radio_value 

      for t in radio_value: 
       i = i+1 
       b = Radiobutton(self, text=t, variable=self.v, value=t) 
       b.grid(row = i, column = 0) 

    def main(): 
     root = Tk() 
     root.geometry('250x250') 
     app1= App(root) 
     root.mainloop() 


    if __name__ == '__main__': 
     main() 
+0

は古い削除、再作成します。 –

答えて

2

問題は、新しいラジオボタンを作成する前に、古いラジオボタンを削除しないということです。 1つの解決策は、それらを目に見えないフレームに入れることです。フレームを削除すると、ラジオボタンが自動的に破棄されます。別の解決方法は、それらを後で個別に破棄できるように参照を保持することです。ここで

は、参照を維持する例を示します

def __init-_(self, parent): 
    ... 
    self.radios = [] 

def set_Radio(self,parent): 
    for widget in self.radios: 
     widget.destroy() 
    self.radios = [] 
    ... 
    for t in radio_value: 
     ... 
     b = Radiobutton(...) 
     self.radios.append(b) 
     ... 
+0

はい。私は古いものを削除したり、置き換える方法を探していました。それは動作します。ありがとう! – Jio

関連する問題