Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter列表框工作不正常_Python_Tkinter_Listbox - Fatal编程技术网

Python Tkinter列表框工作不正常

Python Tkinter列表框工作不正常,python,tkinter,listbox,Python,Tkinter,Listbox,我的代码有3个列表框。我在每个列表框上都附加了一个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, fi

我的代码有3个列表框。我在每个列表框上都附加了一个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()
在第一次点击时,无论在哪个列表框上,它都能完美地工作。在第二次单击时,它只在第一个列表框上工作,在其他两个列表框上什么也不发生

为什么对另一个列表框的第二次单击不起作用


谢谢。

这是因为您总是在第一个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])
请尝试立即打印num[0]所在的内容。我猜,这不是你所期望的。应用基本的调试技巧:打印出中间变量以验证您的假设。