Home > Software design >  Tkinter, ignore certain lines from a tcl file?
Tkinter, ignore certain lines from a tcl file?

Time:02-12

Basically, I just want to remove the mouse scrollwheel binding for scrolling in ttk.Treeview widget. And I found that a specific line in the file found in

Python.framework/Versions/3.9/lib/tk8.6/ttk/treeview.tcl 

is responsible for it, that if removed, disables the mouse scrollwheel for scrolling the view:

ttk::copyBindings TtkScrollable Treeview 

However, I don't want to affect the built-in files. My only solution was to create py2app bundle and delete the same line from the treeview.tcl inside the bundle. But is there a direct way to do this inside a script.py file without affecting the tcl file?

CodePudding user response:

You don't have to modify the original code. Tkinter's event handling mechanism is very robust. It's easy to prevent the default bindings from running, bind binding a function that returns the string "break". Returning "break" will prevent any other handlers in the widget's binding tags from being invoked.

Here's a short contrived example:

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

Note if you're on an x11 based system you might have to disable the bindings for <Button-4> and <Button-5> instead of <MouseWheel>.

  • Related