在没有 'disabled' 方法的情况下限制 Tkinter 中 Entry 字段中的用户输入

Restricting user entry in Entry field in Tkinter without 'disabled' method

我想限制用户进入 tkinter Entry 字段。 但我不想完全禁用小部件。 主要原因是我有 4924 个命令,其中包括向 Widget 中插入字符,我不能将这些代码中的每一行都更改为以下代码。我只有足够的时间去上学。

field.configure(state='mormal')
field.insert(0, "example word")
field.configure(state='disabled')

我真的很感激任何能帮助我解决这个问题的方法(包括低效的方法)。 我的源代码大约有 10100 行代码。(我正在制作一个高级计算器)

也许除了输入字段之外还有其他方法可以帮助我解决这个巨大的问题。

其中一种方法是创建一个继承自 Entry 的自定义 class 并覆盖 insert():

import tkinter as tk
...

class MyEntry(tk.Entry):
    def __init__(self, master=None, **kw):
        super().__init__(master, **kw)
        # make it disabled, but with black on white like in normal state
        self.config(state='disabled', disabledforeground='black', disabledbackground='white')

    def insert(self, pos, value):
        self.config(state='normal')
        super().insert(pos, value)
        self.config(state='disabled')

    def delete(self, first, last=None):
        self.config(state='normal')
        super().delete(first, last)
        self.config(state='disabled')

...

field = MyEntry(...)  # use MyEntry instead of tk.Entry
...

它仍然使用 'disabled' 状态,但您不需要更改应用程序的其他部分。

如果您不希望用户在整个程序中向输入小部件键入任何内容,您可以这样做:

my_entry.bind("<Key>", lambda a: "break")

这将忽略用户对条目小部件的任何按键操作,但您仍然可以随时在条目小部件中插入和删除文本。