Tkinter,忽略 tcl 文件中的某些行?
Tkinter, ignore certain lines from a tcl file?
基本上,我只想删除用于在 ttk.Treeview 小部件中滚动的鼠标滚轮绑定。我发现文件中的特定行位于
Python.framework/Versions/3.9/lib/tk8.6/ttk/treeview.tcl
负责它,如果删除,将禁用用于滚动视图的鼠标滚轮:
ttk::copyBindings TtkScrollable Treeview
但是,我不想影响内置文件。
我唯一的解决方案是创建 py2app bundle 并从包内的 treeview.tcl 中删除同一行。但是有没有直接的方法在 script.py 文件中执行此操作而不影响 tcl 文件?
您不必修改原始代码。 Tkinter 的事件处理机制非常健壮。很容易防止默认绑定 运行,绑定绑定 returns 字符串“break”的函数。返回“break”将阻止调用小部件绑定标签中的任何其他处理程序。
这是一个简短的人为示例:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root)
tree.pack(side="top", fill="both", expand=True)
for i in range(20):
tree.insert("", "end", text=f"Item #{i+1}")
tree.bind("<MouseWheel>", lambda event: "break")
root.mainloop()
请注意,如果您使用的是基于 x11 的系统,您可能必须禁用 <Button-4>
和 <Button-5>
的绑定,而不是 <MouseWheel>
。
基本上,我只想删除用于在 ttk.Treeview 小部件中滚动的鼠标滚轮绑定。我发现文件中的特定行位于
Python.framework/Versions/3.9/lib/tk8.6/ttk/treeview.tcl
负责它,如果删除,将禁用用于滚动视图的鼠标滚轮:
ttk::copyBindings TtkScrollable Treeview
但是,我不想影响内置文件。 我唯一的解决方案是创建 py2app bundle 并从包内的 treeview.tcl 中删除同一行。但是有没有直接的方法在 script.py 文件中执行此操作而不影响 tcl 文件?
您不必修改原始代码。 Tkinter 的事件处理机制非常健壮。很容易防止默认绑定 运行,绑定绑定 returns 字符串“break”的函数。返回“break”将阻止调用小部件绑定标签中的任何其他处理程序。
这是一个简短的人为示例:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root)
tree.pack(side="top", fill="both", expand=True)
for i in range(20):
tree.insert("", "end", text=f"Item #{i+1}")
tree.bind("<MouseWheel>", lambda event: "break")
root.mainloop()
请注意,如果您使用的是基于 x11 的系统,您可能必须禁用 <Button-4>
和 <Button-5>
的绑定,而不是 <MouseWheel>
。