tkinter Python: Wie der Eingabecursor von einem ttk.Entry entfernt?
Frage
ich eine Instanz von ttk.Entry haben. Der Benutzer klickt. Ich habe das Ereignis gebunden. In Abhängigkeit von einer Bedingung, mag ich entweder die Eingabecursor Eingabe erscheinen und erlaubt oder Ich möchte im Wesentlichen den Klick ignorieren und nicht den Eingang hat Cursor im ttk.Entry erscheinen. I nicht wollen die nur lesbar oder deaktiviert Staaten haben zu verwenden.
Fokus Manipulieren hat nicht wirksam.
Lösung 2
Nach der TTK Dokumentation Schleppen, dies funktioniert der Trick:
ttk.Style().map("TEntry",
foreground=[('disabled', 'black')],
fieldbackground=[('disabled','white')]
)
widget['state'] = 'disabled'
Andere Tipps
Hier ist eine Klasse, die das tut, was Sie fragen.
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)
Da jedoch Ihre wirkliche Sorge ist, dass Sie nicht wollen, ein behinderter Eintrag deaktiviert aussehen soll, stellt nur die Farben von disabledbackground
und disabledforground
die Farben von background
und forground
anzupassen. Wenn Sie diese in eine Klasse gerollt müssen, tun Sie es wie folgt aus:
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'))
Und es wie folgt verwendet werden:
e = MyEntry(root)
e.config(state=DISABLED) # or state=NORMAL
Hinweis. Seien Sie vorsichtig, wenn gui Konventionen neu zu erfinden. Mit etwas, das aussieht handeln aktiviert deaktiviert kann verwirrend für Benutzer werden. Also nicht ändern, wenn Sie guten Grund haben.