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

时间:2015-07-23 10:16:11

标签: python binding tkinter treeview heading

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

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

在config中使用-command:

def foo():
    pass

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

答案 2 :(得分:0)

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

这是一个Python 2片段,它将加载树视图并演示调用方法和外部函数:

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()

请注意,由于某种原因,第一次点击似乎不会立即起作用,但会在第二次点击之前卡在缓冲区中 - 非常渴望听到有人对此进行解释