不使用“禁用”方法限制Tkinter中输入字段中的用户输入

2024-10-01 13:43:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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


Tags: 方法代码用户命令field部件tkinterconfigure
2条回答

其中一种方法是创建从Entry继承的自定义类并重写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
...

它仍然使用“禁用”状态,但不需要更改应用程序的其他部分

如果您不希望用户在整个程序中向entry widget键入任何内容,您可以执行以下操作:

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

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

相关问题 更多 >