我写了一个用于创建Listbox对象的类,我想将列表框与同一类中的方法绑定,但出现属性错误。我在这里做错了什么?
class ListObj(tkinter.Listbox):
def __init__(self, window, cname, r, c, rs, cs, sticky, bg, padx=5, pady=5, ipadx=0, ipady=0, **kwargs):
self = tkinter.Listbox(window)
self.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky=sticky, padx=padx, pady=pady,
ipadx=ipadx, ipady=ipady)
self.bind('<<ListboxSelect>>', self.on_select)
def on_select(self):
pass
输出:
AttributeError: 'Listbox' object has no attribute 'on_select'
答案 0 :(得分:1)
引起问题的行是self = tkinter.Listbox(window)
。您无需告诉自己这是一个列表框,因为它已经继承了类定义中的列表框。
执行此操作:
class ListObj(tkinter.Listbox):
def __init__(self, window, **kwargs):
super().__init__()
self.bind('<<ListboxSelect>>', self.on_select)
def on_select(self):
pass
您应该在类外部的引用变量上使用网格。从类内部使用几何管理器不是最佳选择。
var_name = ListObj(var1, var2, var2 ...)
var_name.grid(configs....)