1

ttk.Entry のインスタンスがあります。ユーザーはそれをクリックします。イベントをバインドしました。いくつかの条件に応じて、入力カーソルを表示して入力できるようにするか、基本的にクリックを無視して入力カーソルを ttk.Entry に表示させないようにします。読み取り専用または無効な状態を使用する必要はありません。

フォーカスを操作しても効果はありません。

4

2 に答える 2

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)

ただし、実際の関心事は、無効になっているエントリを無効に見せたくないということなので、 と の色を と の色に一致するように設定するdisabledbackgroundだけdisabledforgroundです。これをクラスにまとめる必要がある場合は、次のようにします。backgroundforground

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 規則を再発明するときは注意してください。有効に見えるものを無効にすると、ユーザーが混乱する可能性があります。したがって、正当な理由がない限り、これを変更しないでください。

于 2010-11-17T16:28:26.003 に答える
0

ttk ドキュメントをトロールした後、これはトリックを行います:

    ttk.Style().map("TEntry",
                    foreground=[('disabled', 'black')],
                    fieldbackground=[('disabled','white')]
                    )
    widget['state'] = 'disabled'
于 2010-11-17T22:09:29.927 に答える