Tkinter Python: Как удалить входной курсор из TTK.entry?

StackOverflow https://stackoverflow.com/questions/4205996

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть экземпляр TTK.entry. Пользователь нажимает на него. У меня есть связанное событие. В зависимости от некоторого состояния я либо хочу, чтобы входной курсор появился и позволит печатать или По сути, я хочу игнорировать щелчок, а не у входного курсора появляется в TTK.entry. я нет Хотите использовать чтенные или отключенные состояния.

Манипулирующий фокус не влияет.

Это было полезно?

Решение 2

После траления документации TTK это делает трюк:

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

Другие советы

Вот класс, который делает то, что вы спрашиваете.

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)

Тем не менее, поскольку ваша реальная проблема заключается в том, что вы не хотите, чтобы вводиться инвалида, чтобы посмотреть отключить, просто установить цвета disabledbackground а также disabledforground соответствовать цвета 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. Наличие чего-то, что выглядит с включенным действием, отключено, может быть запутано для пользователей. Так что не измените это, если у вас нет веских причин.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top