python - 在tkinter.treeview中选择一个单元格并获取单元格数据

标签 python tkinter treeview

我想使用鼠标指针选择 tkinter.treeview() 创建的表格中的一个单元格并打印出该单元格的值。我怎样才能做到这一点?

下面是创建 tkinter.treeview 表的示例代码。在这种情况下,我想使用鼠标指针单击“机场”值之一。但是,当我单击该单元格时,会选择整行(即小部件项)。我怎样才能避免这种情况,以便得到我想要的东西?

import tkinter as tk
import tkinter.ttk as ttk

class App(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        ttk.Frame.__init__(self, parent, *args, **kwargs)
        self.tree = ttk.Treeview(parent, columns=("size", "modified"))
        self.tree["columns"] = ("date", "time", "loc")

        self.tree.column("date", width=80)
        self.tree.column("time", width=80)
        self.tree.column("loc", width=100)

        self.tree.heading("date", text="Date")
        self.tree.heading("time", text="Time")
        self.tree.heading("loc", text="Loc")
        self.tree.bind('<ButtonRelease-1>', self.selectItem)

        self.tree.insert("","end",text = "Name",values = ("Date","Time","Loc"))
        self.tree.insert("","end",text = "John",values = ("2017-02-05","11:30:23","Airport"))
        self.tree.insert("","end",text = "Betty",values = ("2014-06-25","18:00:00","Orchard Road"))

        self.tree.grid()

    def selectItem(self, event):
        curItem = self.tree.focus()
        print (self.tree.item(curItem))


if __name__ == "__main__":
    window = tk.Tk()
    app = App(window)
    window.mainloop()

最佳答案

感谢 Bryan Oakley 的指导,我已将 selectItem 回调修改为:

def selectItem(self, event):
    curItem = self.tree.item(self.tree.focus())
    col = self.tree.identify_column(event.x)
    print ('curItem = ', curItem)
    print ('col = ', col)

    if col == '#0':
        cell_value = curItem['text']
    elif col == '#1':
        cell_value = curItem['values'][0]
    elif col == '#2':
        cell_value = curItem['values'][1]
    elif col == '#3':
        cell_value = curItem['values'][2]
    print ('cell_value = ', cell_value)

它给了我我想要的东西。希望这个脚本能够帮助其他提出同样问题的人。

关于python - 在tkinter.treeview中选择一个单元格并获取单元格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48268506/

相关文章:

python - lambda 作为 jinja2 过滤器的参数?

python - 如何使用python脚本检查elasticsearch中是否存在索引并对其执行异常处理?

Python 2.7.10 Tkinter 在文本框中的文本周围使用大括号

python - 无法在 ubuntu 上升级 redis-py 包

Python Pandas 处理 308 请求

Python3 Tkinter - 将输入(y)写入子进程的控制台

python-3.x - Python 3 Tkinter - 以顶层为主机的消息框?

delphi - 递归遍历 TreeView 中的节点?

.net - .NET 中 TreeView 的延迟加载

c# - 对 TreeView 中的对象进行分类?