首页 > 解决方案 > 输入字段中是否有不可编辑前缀的配置选项

问题描述

我正在尝试使用 Tkinter 制作自己的控制台,并且我希望能够在输入字段中显示前缀,并使用 console.prefix("prefix_goes_here") 来设置所述前缀。但是当我使用 entry.set("prefix_goes_here") 时,用户可以删除前缀。

我的意思的例子可以在 CMD 中找到

C:\Users\Nathan>command_goes_here

“>”之前的所有内容都是我将其归类为前缀的内容(但我不知道它是否有正式名称,所以我只是澄清一下)。

我还希望仍然能够使用 entry.get() 来获取这个前缀,但我可以将前缀存储在一个变量中,然后再添加它。

标签: pythontkintertkinter-entry

解决方案


没有配置选项。

一种技术是使用Entry小部件的验证功能。在验证功能中,您可以检查条目是否包含前缀,如果不包含则拒绝编辑。

有关条目验证的更多示例,请参阅交互式验证 tkinter 中的条目小部件内容

例子

import tkinter as tk

class Example():
    def __init__(self):
        root = tk.Tk()

        self.prefix = r'C:\Users\Nathan> '
        vcmd = (root.register(self.onValidate), '%P')
        self.entry = tk.Entry(root, validate="key", validatecommand=vcmd)
        self.entry.pack(padx=20, pady=20)
        self.entry.insert(0, self.prefix)

    def onValidate(self, P):
        return P.startswith(self.prefix)

e = Example()
tk.mainloop()

推荐阅读