我正在使用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"
然而,它仍然无效。单击后鼠标不在其上时,该表仍可滚动。
有什么建议吗?非常感谢你!