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

Posted

技术标签:

【中文标题】如何将动作绑定到 python 中的 tkinter 树视图的标题?【英文标题】:How to bind an action to the heading of a tkinter treeview in python? 【发布时间】:2015-10-13 14:02:04 【问题描述】:

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

此外,当我将鼠标悬停(或右键单击)某个标题时,我希望显示一个工具提示框。工具提示对于其他小部件来说不是问题,但树视图的标题当然不是完整的小部件。

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

【问题讨论】:

【参考方案1】:

您可以将事件绑定到树视图小部件本身。该小部件有一个名为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":
        ...

【讨论】:

谢谢!我用“tree.identify”尝试了它,它实际上只在它是一个单元格或 a(ny) 标题时才返回。我最终使用了“tree.identify_column”,它为第三列返回了类似“#2”的结果,这对我来说非常有用!【参考方案2】:

在配置中使用-command:

def foo():
    pass

tree.heading(column1, text = 'some text', command = foo)

【讨论】:

在循环中为每个标题分配不同的命令时,使用带有标题作为参数的 lambda:treeview.heading(col, command=lambda c=col: do_stuff(c))。这样,对col 的引用甚至保持在循环之外。【参考方案3】:

使用上面 Mihail 建议的 tree.heading 命令,但请注意,如果您在 class 内运行,则需要像往常一样将 self 传递给方法。

这是一个 Python 2 sn-p,它将加载树视图并演示如何调用方法和外部函数:

import Tkinter
import ttk

class TreeWindow:
    def __init__(self):
        win = Tkinter.Tk()
        tree = ttk.Treeview(win,height=10,padding=3)

        self.tree = tree
        self.win = win

        self.tree["columns"] = ("Column 1","Column 2")
        self.tree.grid(row=1,column=0,sticky=Tkinter.NSEW)

        self.tree.column("Column 1", width=100)
        self.tree.heading("Column 1", text="Column 1", command=PrintColumnName1)

        self.tree.column("Column 2", width=100)
        self.tree.heading("Column 2", text="Column 2", command=self.PrintColumnName2)

        self.tree.insert('', 0, text="Row 1", values=("a",1))
        self.tree.insert('', 1, text="Row 2", values=("b",2))

        self.win.mainloop()

    def PrintColumnName2(self):
        print("Column 2")

def PrintColumnName1():
    print("Column 1")

treeWindow = TreeWindow()

请注意,出于某种原因,第一次点击似乎不会立即生效,而是卡在缓冲区中,直到您再次点击 - 非常渴望听到任何人对此的解释。

【讨论】:

以上是关于如何将动作绑定到 python 中的 tkinter 树视图的标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何将点击事件绑定到 Tkinter 中的画布? [关闭]

如何将空格键键绑定到tkinter(python)中的某个方法

哪种方法用于将动作回调绑定到 JSF/ICEFaces InputFile?

如何在 Struts 2 中将 JSON 绑定到 bean

如何将回车键绑定到 tkinter 中的函数?

如何将回车键绑定到tkinter中的函数?