tkinter python: como remover o cursor de entrada de um ttk.entry?
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.
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.