Treeview选择/按钮功能

时间:2017-01-27 14:23:55

标签: python sql tkinter tree treeview

对于我的项目,我在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'))

我还有所需的导入,窗口设置等

1 个答案:

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