我正在尝试在按下按钮时将元素插入到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'
我不确定我哪里出错了
答案 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有一个属性LB
。LB
是构造函数中的本地范围变量。
你可能意味着什么:
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的新手。我推荐一两个介绍。网上有很多可用的。以下是一些主要内容: