如何将动作绑定到 python 中的 tkinter 树视图的标题?
How to bind an action to the heading of a tkinter treeview in python?
我正在使用 tkinter Treeview
小部件来显示数据库。单击其中一个标题时的命令用于根据单击的列对 table 进行排序。
此外,我希望在我将鼠标悬停(或右键单击)在其中一个标题上时立即显示一个工具提示框。工具提示对于其他小部件不是问题,但树视图的标题当然不是完整的小部件。
除了常用命令外,如何将任何操作绑定到标题?
您可以将事件绑定到树视图小部件本身。该小部件有一个名为 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":
...
在配置中使用 -command:
def foo():
pass
tree.heading(column1, text = 'some text', command = foo)
使用上面 Mihail 提议的 tree.heading
命令,但请注意,如果您是来自 class
的 运行,则需要将 self 传递到方法中和往常一样。
这是一个 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()
请注意,出于某种原因,第一次 单击似乎不会立即起作用,而是卡在缓冲区中,直到您第二次单击 - 非常渴望听到任何人对此的解释。
我正在使用 tkinter Treeview
小部件来显示数据库。单击其中一个标题时的命令用于根据单击的列对 table 进行排序。
此外,我希望在我将鼠标悬停(或右键单击)在其中一个标题上时立即显示一个工具提示框。工具提示对于其他小部件不是问题,但树视图的标题当然不是完整的小部件。
除了常用命令外,如何将任何操作绑定到标题?
您可以将事件绑定到树视图小部件本身。该小部件有一个名为 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":
...
在配置中使用 -command:
def foo():
pass
tree.heading(column1, text = 'some text', command = foo)
使用上面 Mihail 提议的 tree.heading
命令,但请注意,如果您是来自 class
的 运行,则需要将 self 传递到方法中和往常一样。
这是一个 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()
请注意,出于某种原因,第一次 单击似乎不会立即起作用,而是卡在缓冲区中,直到您第二次单击 - 非常渴望听到任何人对此的解释。