2017-03-16 17 views
0

私はTkinterの例を見てきましたが、今はボタンを使って作業しています。 ボタンを選択または選択解除すると、他のボタンはすべて同じことを行います。一度に1つのボタンだけが変更されるように変更するにはどうすればよいですか?私は他のことを試しましたが、私は運がありません。一般的に、variable(Tkの変数をグループ内で選択したボタンの値を格納するために:Python Tkinterでラジオボタンを一度に1つだけ選択する方法は?

import tkinter 
from tkinter import ttk 


class Adder(ttk.Frame): 
    """The adders gui and functions.""" 
    def __init__(self, parent, *args, **kwargs): 
     ttk.Frame.__init__(self, parent, *args, **kwargs) 
     self.root = parent 
     self.init_gui() 

    def init_gui(self): 
     """Builds GUI.""" 
     self.root.title('IDL - I.D. Lookup') 

     self.grid(column=0, row=0, sticky='nsew') # this starts the entire form 

     self.num1_entry = ttk.Entry(self, width=15) # width of first input box 
     self.num1_entry.grid(sticky='W', column=1, row = 2) # column and row it is placed on # sticky='w' justifies or aligns to left 

     self.num2_entry = ttk.Entry(self, width=10) # width of second input box 
     self.num2_entry.grid(sticky='W', column=1, row=3) # column and row it is placed on 

     self.calc_button = ttk.Button(self, text='Calculate') # button 
     self.calc_button.grid(column=0, row=4, columnspan=4) # column and row it is placed on 

     self.answer_frame = ttk.LabelFrame(self, text='Answer', height=100) # answer box 
     self.answer_frame.grid(column=0, row=5, columnspan=4, sticky='nesw') 

     self.rad_button = ttk.Radiobutton(self, text='Town').grid(sticky='W', column=0,row=6, columnspan=1) # sticky W to align everything to left   
     self.rad_button = ttk.Radiobutton(self, text='Town1').grid(sticky='W', column=0,row=7, columnspan=1) 
     self.rad_button = ttk.Radiobutton(self, text='Town2').grid(sticky='W', column=0,row=8, columnspan=1) 
     self.rad_button = ttk.Radiobutton(self, text='Town3').grid(sticky='W', column=0,row=9, columnspan=1) 
     self.rad_button = ttk.Radiobutton(self, text='Town4').grid(sticky='W', column=0,row=10, columnspan=1) 
     self.rad_button = ttk.Radiobutton(self, text='Town5').grid(sticky='W', column=0,row=11, columnspan=1) 
     self.rad_button = ttk.Radiobutton(self, text='Town6').grid(sticky='W', column=0,row=12, columnspan=1) 
     self.rad_button = ttk.Radiobutton(self, text='Town7').grid(sticky='W', column=0,row=13, columnspan=1) 
     self.rad_button = ttk.Radiobutton(self, text='Town8').grid(sticky='W', column=0,row=14, columnspan=1) 

     self.answer_label = ttk.Label(self.answer_frame, text='') # text=' ' holds text in the answer box 
     self.answer_label.grid(column=0, row=0) 

     # Labels that remain constant throughout execution. 
     ttk.Label(self, text='IDL - I.D. Lookup').grid(column=0, row=0, 
       columnspan=4) 
     ttk.Label(self, text='Name').grid(column=0, row=2, 
       sticky='w') 
     ttk.Label(self, text='I.D.').grid(column=0, row=3, 
       sticky='w') 

     ttk.Separator(self, orient='horizontal').grid(column=0, # line under title. 
       row=1, columnspan=4, sticky='ew') 

     for child in self.winfo_children(): 
      child.grid_configure(padx=10, pady=4) # padx 10 adds horizontal padding on the out edge of window 



if __name__ == '__main__': 
    root = tkinter.Tk() 
    Adder(root) 
    root.mainloop() 

答えて

1

のTkinterのラジオボタンは、あなたが提供していない正常に動作させるための2つのオプションが必要です。ここで

は私の現在のコードですIntVarまたはStringVar)と value(そのボタンが選択されたときに変数に格納される、グループ内の各ボタンの個別の値)を指定します。だから、必要があると思います。その後、上部のどこかに

self.selectedTown = tkinter.StringVar() 
self.selectedTown.set('Town') 

を、のようなもの:各ボタンの

ttk.Radiobutton(self, text='Town', value='Town', variable=self.selectedTown) 

print self.selectedTown.get() 

のように、選択した項目をチェックしたい場合。

PS:すべてのボタンを同じ変数self.rad_buttonに割り当てるのは意味がありません。とにかく、実際のボタン自体は割り当てられていません。毎回Noneを割り当てています。これは、各行の.grid()コールの結果です。

関連する問題