python 2.7 ttk treeview - 当鼠标不在表

时间:2018-06-10 09:52:59

标签: python treeview mouseover mousewheel ttk

我正在使用ttk.treeview构建一个表。这是代码:

self.display_table = Tk.Frame(self.parent)

self.headers = [...]  # list of strings
self.tree = ttk.Treeview(columns=range(len(self.headers)), show="headings")
self.tree_vsb = ttk.Scrollbar(orient="vertical", command=self.tree.yview)
self.tree.configure(yscrollcommand=self.tree_vsb.set)

self.tree.grid(column=0, row=0, sticky='nsew', in_=self.display_table)
self.tree_vsb.grid(column=1, row=0, sticky='ns', in_=self.display_table)

self.display_table.grid_columnconfigure(0, weight=1)
self.display_table.grid_rowconfigure(0, weight=1)

self.tree.bind('<Enter>', self._bound_to_mousewheel_table)
self.tree.bind('<Leave>', self._unbound_to_mousewheel_table)

for values in table_content
    ...  # fill table with content

以下是三个事件函数:

def _bound_to_mousewheel_table(self, event):
    self.tree.bind_all("<MouseWheel>", self._on_mouse_wheel_table)

def _unbound_to_mousewheel_table(self, event):
    self.tree.unbind_all("<MouseWheel>")

def _on_mouse_wheel_table(self, event):
    self.tree.yview_scroll(-1*(event.delta/120), "units")

一开始工作正常。

但是,如果我单击该表,我单击的行将突出显示(这很好),但即使我将鼠标移出表区域,该表也将保持可滚动状态。

我尝试删除滚动条。单击表后,即使没有滚动条,表也将变为可滚动。

我的猜测是,当我点击表格时,后面的代码触发了一些能够滚动的功能。所以我尝试添加以下事件功能来禁用点击事件:

self.tree.bind("<Button-1>", self.do_nothing)

def do_nothing(self, event):
    print "click on table detected. will skip"

然而,它仍然无效。单击后鼠标不在其上时,该表仍可滚动。

有什么建议吗?非常感谢你!

0 个答案:

没有答案