删除 tkinter 文本默认绑定

Remove tkinter text default binding

我正在制作一个简单的 tkinter 文本编辑器,但我希望尽可能删除 文本小部件 的所有默认绑定。

例如,当我按下 Ctrl + i 时,它会默认插入一个制表符。 我做了一个事件绑定,打印文本框中有多少行,我也将事件绑定设置为 Ctrl + i

当我 运行 它时,它会打印文本框内的行数,还会插入一个制表符。

我想知道如何覆盖默认绑定,或者了解如何删除所有默认绑定。

顺便说一句,这是我的代码:

from tkinter import *

class comd: # Contains primary commands
    # Capital Rule ----------------------------
    # G = Get | I = Insert | D = Draw | S = Set
    # -----------------------------------------

    def Ggeo(self): # Get Geometry (Get window geometry)
        x = root.winfo_width()
        y = root.winfo_height()
        print("Current Window Geometry")
        print(str(x) + " x " +str(y))

    def Idum(self): # Insters "Dummy Insert"
        import tkinter as tkin
        tbox.insert(INSERT, "Dummy Insert")

    def Ilim(self): # Prints How many lines are in
        info =  int(tbox.index('end-1c').split('.')[0])
        print(info)



root = Tk()
root.geometry("885x600-25-25")

tbox = Text(root, font=("Courier","14","bold"))
tbox.pack(expand = True , fill = BOTH)


# Problem here --------------------
tbox.bind("<Control-i>", comd.Ilim)
# ---------------------------------


mainloop()

您可以通过让函数 return 字符串 "break" 来覆盖绑定。例如:

def Ilim(self): # Prints How many lines are in
    info =  int(tbox.index('end-1c').split('.')[0])
    print(info)
    return "break"

如果您想完全删除所有绑定(包括允许您插入字符的绑定),这很容易实现。所有绑定都与 "bind tag"(或 "bindtag")相关联。如果删除 bindtag,则删除绑定。

例如,这将删除所有默认绑定:

    bindtags = list(tbox.bindtags())
    bindtags.remove("Text")
    tbox.bindtags(tuple(bindtags))

有关绑定标签的更多信息,请参阅此答案: