如何将动作绑定到python中tkinter树视图的标题?

Jon*_*nny 5 python treeview binding tkinter heading

我正在使用tkinter Treeview小部件来显示数据库.单击其中一个标题时的命令用于根据单击的列对表进行排序.

此外,我希望在我悬停(或右键单击)其中一个标题后立即显示工具提示框.其他小部件的工具提示不是问题,但树视图的标题当然不是完整的小部件.

除了通常的命令外,如何将任何操作绑定到标题?

Bry*_*ley 7

您可以将事件绑定到树视图窗口小部件本身.窗口小部件有一个名为identify的方法,可用于确定事件发生在树视图的哪个部分.

例如:

...
self.tree = ttk.Treeview(...)
self.tree.bind("<Double-1>", self.on_double_click)
...
def on_double_click(self, event):
    region = self.tree.identify("region", event.x, event.y)
    if region == "heading":
        ...
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我尝试使用“tree.identify”,它实际上仅在它是单元格或 aa(ny) 标题时才返回。我最终使用了“tree.identify_column”,它返回了第三列的“#2”结果,这对我来说非常有用! (3认同)

Mih*_*ich 5

在配置中使用-命令:

def foo():
    pass

tree.heading(column1, text = 'some text', command = foo)
Run Code Online (Sandbox Code Playgroud)

  • 当为循环中的每个标题分配不同的命令时,请使用 lambda 并将标题作为参数:`treeview.heading(col, command=lambda c=col: do_stuff(c))`。这样,对“col”的引用甚至可以保留在循环之外。 (3认同)