麻烦的python listbox事件

时间:2014-10-20 16:54:03

标签: python-2.7 listbox event-handling tkinter

我使用python GUI更新的python语言 我会尝试恢复列表框中的选项,我在这里和那里找到了一些代码 但是另一个尝试打包他们。

最后我写了这个它除了列表框事件之外效果很好,我有这个错误* 当我点击它,它来自哪里?

如果你们中的任何人有关于如何构建python GUI的链接或书籍......

问候

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib64/python2.7/lib-tk/Tkinter.py", line 1470, in __call__
return self.func(*args)
TypeError: onselect() takes exactly 1 argument (2 given)



class Interface(Frame):
""" """

def __init__(self, fenetre, **kwargs):
    Frame.__init__(self, fenetre, width=768, height=576, **kwargs)
    self.pack(fill=BOTH)
    self.nb_clic = 0
    self.nb_clic2 = 0

    # widgets

    self.Btn_quit = Button(self, text="Quit", command=self.quit)
    self.Btn_quit.pack(side="left")

    self.Btn_clear = Button(self, text="Clear plot", fg="red",
            command=self.clic)
    self.Btn_clear.pack(side="right")

    self.Btn_Add = Button(self, text="Add plot", fg="Blue",
            command=self.clic2)
    self.Btn_Add.pack(side="right")

    self.Btn_setdim = Button(self, text="Set_dim", fg="Blue",
            command=self.clic2)
    self.Btn_setdim.pack(side="right")

    self.lbx=Listbox(self)
    self.lbx.bind('<<ListboxSelect>>', self.onselect)

    Vals = ['one', 'two', 'tree', 'four']

    for s in Vals:
        self.lbx.insert(END, s)

    self.sb = Scrollbar(self)    
    self.sb.config(command = self.lbx.yview) 
    self.lbx.config(yscrollcommand = self.sb.set) 

    self.lbx.pack(side = "left", fill = "y") 
    self.sb.pack(side = "right", fill = "y") 

def onselect(evt):
    # Note here that Tkinter passes an event object to onselect()
    w = evt.widget
    index = int(w.curselection()[0])
    value = w.get(index)
    print 'You selected item %d: "%s"' % (index, value)  

def clic(self):

    self.nb_clic += 1
    self.message["text"] = "you cliked {} time.".format(self.nb_clic)

def clic2(self):
    """ """

if __name__ == "__main__":        

fenetre = Tk()
interface = Interface(fenetre)

interface.mainloop()
interface.destroy()

1 个答案:

答案 0 :(得分:1)

请注意,您正在一个类中编写方法,因为所有其他方法都必须具有self参数。因此,当调用onselect时,它会被赋予参数:self和事件对象,尽管这些方法只能给出一个参数。

只需将方法更改为:

def onselect(self, event):
  ...