为什么在python中将元素插入到列表框中时会出现此错误

时间:2015-10-14 17:06:42

标签: python python-3.x tkinter

我正在尝试在按下按钮时将元素插入到ListBox中。但是当按下按钮时,我不断收到错误。

所以这是我的代码:

import tkinter as tk

class One(object):

    def __init__(self, root):

        root.title('TEST')

        mainFrame = tk.Frame(root, width="500", height = "500")

        LB = tk.Listbox(mainFrame, height="22")
        LB.pack()

        select = tk.Button(mainFrame, text="Add", command = self.add)
        select.pack()

        mainFrame.pack()

    def add(self):
        One.__init__.LB.insert(0, "100")

def main():
    root = tk.Tk()
    app = One(root)
    root.geometry("500x500")
    root.mainloop()

if __name__ == '__main__':
    main()

当我运行它时,我收到以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
    return self.func(*args)
  File "C:/Users/Leo Muller/Desktop/plottertest2.py", line 20, in add
    One.__init__.LB.insert(0, "100")
AttributeError: 'function' object has no attribute 'LB'

我不确定我哪里出错了

2 个答案:

答案 0 :(得分:1)

因为当前配置了您的类,LB是一个局部变量,只能从__init__()函数中访问。它无法以您尝试的方式访问。

您希望在命名中添加self.以将其更改为属性,以便可以从任何位置访问它:

class One(object):

    def __init__(self, root):
        root.title('TEST')

        mainFrame = tk.Frame(root, width="500", height = "500")

        self.LB = tk.Listbox(mainFrame, height="22")
        self.LB.pack()

        select = tk.Button(mainFrame, text="Add", command = self.add)
        select.pack()

        mainFrame.pack()

    def add(self):
        self.LB.insert(0, "100")

答案 1 :(得分:0)

正如回溯告诉你的那样,问题在于这一行:

One.__init__.LB.insert(0, "100")

您正在尝试访问LB的构造函数方法的One属性(即One.__init__方法没有' t有一个属性LBLB是构造函数中的本地范围变量。

你可能意味着什么:

class One(object):

    def __init__(self, root):
        # ...
        self.LB = tk.Listbox(mainFrame, height="22")
        self.LB.pack()
        # ...

    def add(self):
        self.LB.insert(0, "100")

从外观上看,我猜测你是Python的新手。我推荐一两个介绍。网上有很多可用的。以下是一些主要内容: