2016-11-18 4 views
-1

私のコードは3つのリストボックスを持っています。私はそれぞれにListBoxSelectを添付しています。したがって、1つのリストボックスをクリックすると、他のリストボックスの同じ行が選択されます。Tkinterリストボックス<< ListBoxSelect >>が正しく動作しません

def __init__(self, master, lists): 
    Frame.__init__(self, master) 
    self.lists = [] 
    for column,size in lists: 
     frame = Frame(self); frame.pack(side=LEFT, expand=YES, fill=BOTH) 
     Label(frame, text=column, borderwidth=1, relief=RAISED).pack(fill=X) 
     lb = Listbox(frame, width=size, borderwidth=1, selectborderwidth=1, relief=FLAT, export=FALSE) 
     lb.pack(expand=YES, fill=BOTH) 
     lb.bind('<<ListboxSelect>>',self.immediately) 
     lb.bind("<MouseWheel>", self._on_mousewheel) 
     self.lists.append(lb) 

def immediately(self, e): 
    #Find the element 
    for elem in self.lists: 
     num = elem.curselection() 
     if len(num) == 1: 
      break 
    #Unselect every element 
    for elem in self.lists: 
     elem.selection_clear(0,elem.size()) 
    #Select elements in the same row 
    for i in range(self.lists[0].size()): 
     for elem in self.lists: 
      elem.selection_set(num[0]) 

if __name__ == '__main__': 
    window = Tk() 
    window.title("Account Manager") 
    window.resizable(0,0) 
    window.geometry('+100+200') 
    accountList = MultiListbox(window, (('Website', 20), ('Account Name', 20), ('Password', 20))) 
    accountList.pack(expand=YES,fill=BOTH) 
    accountList.loadListFromFile() 
    window.mainloop() 

最初のクリックで(どのリストボックスに関係なく)完全に機能します。 2回目のクリックでは、最初のlistBoxで動作し、他の2つでは何も起こりません。

これは他のリストボックスを2回目にクリックしても機能しないのはなぜですか?

ありがとうございました。

+1

は 'numが[0]' 'immediately'であるものを印刷してみてください。私の推測は、それはあなたが期待するものではない。基本的なデバッグスキルを適用する:中間変数を出力して、仮定を検証します。 –

答えて

2

immediately(...)の最初のforループの最初のリストボックスで常に選択した項目が見つかったからです。選択した項目を見つけるために、(リストボックスが機能をトリガー)e.widgetを使用します。

def immediately(self, e): 
    num = e.widget.curselection() 
    for lb in self.lists: 
     if lb != e.widget: 
      lb.selection_clear(0, lb.size()) 
      lb.selection_set(num[0]) 
+0

ありがとう!それは私の問題を解決しました。 – Lechucico

関連する問題