Python tkinter: Как удалить курсор ввода из ttk.Entry? - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть экземпляр ttk.Entry.Пользователь щелкает по нему.У меня есть событие связано.В зависимости от некоторых условий я либо хочу, чтобы курсор ввода появлялся, и разрешал набирать или . По сути, я хочу игнорировать щелчок и не отображать курсор ввода в ttk.Entry.Я не хочу использовать режимы «только чтение» или «отключено».

Управление фокусировкой не действует.

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

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

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

Примечание. Будьте осторожны при повторном изобретении соглашений графического интерфейса. Если что-то выглядит так, что действие отключено, это может сбить с толку пользователей. Так что не меняйте это, если у вас нет веских причин.

0 голосов
/ 18 ноября 2010

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

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