2017-10-25 1 views
0

私はPython 2.7 with Tkinterを使用しています(Tkinterの新しい:) :) 私は1つのチェックボックスをクリックすると、 のリストを持つUIを持っています。すべてのチェックボックスがチェックされています。 下のコードでは、2行(#で1回)を表示します。 #チェックボックスをオンにすると、1つしかチェックされません。 #をクリックすると、すべてがチェックされています 問題は私が欲しいです噛み付いているかどうかをチェックする各チェックボックスのステータスを知るためには、ステータスを取得するためにvar = Intvarを定義する必要があります 提案はありますか?事前 で おかげで以下はCheckbuttonが彼らのvariable属性に同じ変数をウィジェットあなたのすべてを与えてくれたので、python 2.7を使用するtkinter -allチェックボックスをオンにするとチェックされます

def suites_checkbox_create(self): 
    ExcelWorkBook1 = open_workbook(config.UI_Suites_Location + 'STD_SUITES.xlsx', on_demand=True) 
    First_Sheet1 = ExcelWorkBook1.sheet_by_index(0) 
    plushight = 110 
    suitesList=[] 
    self.CheckboxList=[] 
    for name in (First_Sheet1._cell_values): 
     if name[3] == "General Name": 
      continue 
     else: 
      suitesList.append(name[3]) 


    for index, name in enumerate(suitesList): 

      self.var=IntVar 
      #self.CheckboxList.append(Checkbutton(self.app, text=name)) # using this, i can check once checkbox a time 
      self.CheckboxList.append(Checkbutton(self.app, text=name, variable=self.var)) # with this, once i check once checkbox, all checkboxes(20) are bing checked 
      self.CheckboxList[index].place(y=plushight) 
      plushight += 20 
+1

あなたは 'IntVar用ブラケットを忘れてしまいましたまた、各チェックボタンの状態を取得したい場合は、チェックボタンのようにIntVarsをリストに入れる必要があります。 –

答えて

0

この問題が発生した理由があるdefで関連性があります。できるだけ早くCheckbuttonウィジェットの一つとしてself.varをチェックされていることを意味

Checkbuttonウィジェットのすべてが選択されたそれらに相当1の値を有することを意味1の値が与えられます。

簡単に言えば、値を保存するために使用される変数が同じであるため、他のすべての値が更新されます。

以下の例では、これを参照してください。

from tkinter import * 

root = Tk() 
var = IntVar() 

for i in range(10): 
    Checkbutton(root, text="Option "+str(i), variable = var).pack() 

root.mainloop() 

あなたは以下のように、各Checkbuttonに異なる変数を使用する必要があり、これを解決するには:

from tkinter import * 

root = Tk() 
var = [] 

for i in range(10): 
    var.append(IntVar()) 
    Checkbutton(root, text="Option "+str(i), variable = var[i]).pack() 

root.mainloop() 
関連する問題