使用同一类中的方法绑定tkinter列表框绑定时出错(Python)

时间:2018-12-28 13:31:16

标签: python-3.x tkinter listbox

我写了一个用于创建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'

1 个答案:

答案 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....)