Tkinterのパイソン:どのようにttk.Entryからの入力カーソルを削除しますか?

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

  •  25-09-2019
  •  | 
  •  

質問

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

フォーカスを操作することは効果がありません持っています。

役に立ちましたか?

解決 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)
あなたの本当の懸念は、あなたが無効のエントリが無効になりたくないということですので、しかし、ちょうどdisabledbackgrounddisabledforgroundの色を一致させるために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の規則を再発明するとき、

のように注意してください。ルックスが無効になっ行為はユーザーのために混乱することができます有効になっていることを何かを持ちます。あなたが正当な理由がない限り、だから、これを変更しないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top