对于我的项目,我在tkinter中创建一个表/树视图,我正在填充来自sqlite的数据。我希望能够单击表格中的数据,然后在python shell中打印所选数据。我已经在这里找了解如何做到这一点,我找到了' bind'功能,我已经使用了这个,但是当我点击数据时,它会出现一个错误,上面写着“NameError:name' tree'未定义'。任何人都可以帮我这个吗?
这是我用于它的代码的一部分:
def fnstockButtonPress():
ItemID = []
ItemName = []
ItemDescription = []
ItemPrice = []
table_header = [' Item ID', ' Item Name', ' Item Description', ' Item Price (£)']
container = Frame()
container.place(x=25,y=200)
tree = ttk.Treeview(columns=table_header,show="headings")
vsb = Scrollbar(orient="vertical", command=tree.yview)
tree.configure(yscrollcommand=vsb.set)
tree.grid(column=0, row=0, in_=container)
vsb.grid(column=1, row=0, sticky='ns', in_=container)
container.grid_columnconfigure(0, weight=1)
container.grid_rowconfigure(0, weight=1)
tree.column(table_header[0],width=100)
tree.column(table_header[1],width=200)
tree.column(table_header[2],width=100)
tree.column(table_header[3],width=100)
for col in table_header:
tree.heading(col, text=col.title(), anchor = "w")
closeButton = Button(myGui, text='Home', height=3, width=20, command=lambda :fncloseButton(container,closeButton))
closeButton.place(x=10,y=10)
c.execute('SELECT * FROM ItemType ORDER BY ItemID')
result = c.fetchall()
for x in result:
tree.insert('', 'end', values=x)
tree.bind('<<TreeviewSelect>>', fnStockClick)
def fnStockClick(event):
item = tree.selection()[0]
print('You clicked on', tree.item(item,'text'))
我还有所需的导入,窗口设置等
答案 0 :(得分:2)
您在fnstockButtonPress函数中定义了树变量。
您试图在名为fnStockClick的其他函数中使用它,但您没有在此函数中定义树变量。
树变量是第一个函数的局部变量。
我会使用一个对象并将树变量定义为该类的数据成员,以便我可以在每个方法中使用它。
类似的东西:
class Test():
def __init__(self):
self.tree = None
def fnstockButtonPress(self):
...
self.tree = ttk.Treeview(columns=table_header,show="headings")
self.tree.bind('<<TreeviewSelect>>', self.fnStockClick)
...
def fnStockClick(self,event):
item = self.tree.selection()[0]
print('You clicked on', self.tree.item(item,'text'))