tkinter python:如何从ttk.Entry中移除输入光标?

2 投票
2 回答
4651 浏览
提问于 2025-04-16 07:13

我有一个叫做 ttk.Entry 的输入框。用户点击了这个输入框。我已经设置了一个事件来处理这个点击。根据一些条件,我要么希望输入光标出现,让用户可以输入文字,要么我想忽略这个点击,不让输入光标在这个输入框里出现。我不想使用只读或禁用的状态。

调整焦点并没有什么效果。

2 个回答

1

这里有一个类可以满足你的需求。

class MyEntry(Entry):

    def disable(self):
        self.__old_insertontime = self.cget('insertontime')
        self.config(insertontime=0)
        self.bind('<Key>', lambda e: 'break')

    def enable(self):
        self.unbind('<Key>')
        if self.cget('insertontime') == 0:
            self.config(insertontime=self.__old_insertontime)

不过,因为你真正关心的是不想让一个禁用的输入框看起来像是禁用的,只需要把disabledbackgrounddisabledforground的颜色设置成和backgroundforground一样就行了。如果你想把这个功能放到一个类里,可以这样做:

class MyEntry(Entry):
    def __init__(self, *args, **kwds):
        Entry.__init__(self, *args, **kwds)
        self.config(disabledbackground=self.cget('background'))
        self.config(disabledforeground=self.cget('foreground'))

然后这样使用它:

e = MyEntry(root)
e.config(state=DISABLED) # or state=NORMAL

注意。 在重新设计图形用户界面(gui)时要小心。让看起来可以用的东西实际上是禁用的,可能会让用户感到困惑。所以除非有很好的理由,否则不要随便改变这个。

0

在仔细研究了ttk的文档后,这段代码解决了问题:

    ttk.Style().map("TEntry",
                    foreground=[('disabled', 'black')],
                    fieldbackground=[('disabled','white')]
                    )
    widget['state'] = 'disabled'

撰写回答