Pergunta

Eu tenho uma instância de ttk.entry. O usuário clica nele. Eu tenho o evento encadernado. Dependendo de alguma condição, eu quero que o cursor de entrada apareça e permita a digitação ou Eu essencialmente quero ignorar o clique e não fazer com que o cursor de entrada apareça no ttk.entry. EU não deseja ter que usar os estados readonly ou deficientes.

Manipular o foco não afetou.

Foi útil?

Solução 2

Depois de rastrear a documentação do TTK, isso faz o truque:

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

Outras dicas

Aqui está uma classe que faz o que você pergunta.

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)

No entanto, como sua verdadeira preocupação é que você não deseja que uma entrada desativada pareça desativada, basta definir as cores de disabledbackground e disabledforground Para combinar com as cores de background e forground. Se você precisar disso rolou em uma aula, faça assim:

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 use assim:

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

Observação. Tenha cuidado ao reinventar as convenções da GUI. Ter algo que parece ativado pelo ACT desativado pode ser confuso para os usuários. Portanto, não mude isso, a menos que você tenha um bom motivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top