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

时间:2010-11-17 15:29:57

标签: python tkinter ttk

我有一个ttk.Entry的实例。 用户点击它。 我有活动的约束。 根据某些条件,我想要输入光标出现并允许输入我基本上想要忽略点击而不是输入光标出现在ttk.Entry中。我想要使用只读或禁用状态。

操纵焦点没有效果。

2 个答案:

答案 0 :(得分: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的颜色以匹配background的颜色即可forground。如果您需要将其归入类中,请执行以下操作:

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约定时要小心。如果某些内容看起来已启用,则禁用行为会让用户感到困惑。所以除非你有充分的理由,否则不要改变它。

答案 1 :(得分:0)

在拖网ttk文档之后,这就是诀窍:

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