Focus von Entry-Feld entziehen?

Fragen zu Tkinter.
Antworten
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,

In einem tk-Fenster, habe ich ein Entry_Feld.
Mit entry.focus_set(), setze ich den Focus direkt auf das Eingabefeld.

Code: Alles auswählen

            self.bestellen = tk.StringVar()
            eingabe = tk.Entry(self.baseWindow, textvariable=self.bestellen,
                bg=self.bg, width=8,
                font=self.txt2)
            eingabe.pack(side='left')
            eingabe.focus_set()
Wenn ich mit der Maus, einen anderen Bereich anklicke und wieder zurück auf das Entry-Feld gehe, flattert das tk-Fenster unkontrolliert, bis ein tcl-Error kommt.
Deaktiviere ich entry.focus_set(), passiert dies nicht.

Gibt es einen Gegenpart zu focus_set(), der den Fokus von dem betreffenden Entry-Feld unter bestimmten Voraussetzungen wieder entziehen kann?

Grüße Nobuddy
BlackJack

@Nobuddy: Du könntest den Fokus auf ein anderes Widget setzen. Irgendeins muss ja immer den Fokus haben wenn das Fenster aktiv ist.

Das Flackern und der Tk-Fehler sind eigentlich nicht normal und deuten wohl auf ein Problem mit Deinem Code hin.
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

BlackJack hat geschrieben:@Nobuddy: Du könntest den Fokus auf ein anderes Widget setzen. Irgendeins muss ja immer den Fokus haben wenn das Fenster aktiv ist.
Klar, aber wenn man ein bestimmtes Fenster aufruft, möchte man im Normalfall etwas damit tun.
In diesem Fall möchte ich eine Eingabe machen und wenn der Focus schon im Entry-Feld ist, spare ich mir mit der Maus den Weg.
BlackJack hat geschrieben:Das Flackern und der Tk-Fehler sind eigentlich nicht normal und deuten wohl auf ein Problem mit Deinem Code hin.
Daran habe ich auch schon gedacht und ganz auszuschließen ist es ja nicht. :wink:
Ich programmiere mit Geany, dort startet automatisch das Terminal von Geany, wenn ich ein Python-Modul über Geany starte.
Dieses Flackern passiert, wenn ich auf das Terminal von Geany klicke und anschließend wieder auf mein Tk-Fenster zurück gehe.
Muß mal testen, ob das auch so ist, wenn das Python-Modul ohne Geany starte!

PS: Habe dies gerade getestet, scheint an meinem Code zu liegen.

Hier mal ein Auszug der Fehlermeldung:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.2/tkinter/__init__.py", line 1402, in __call__
return self.func(*args)
File "gui_work.py", line 7684, in check_chance
self.set_scrolled_entries(self.default_labels, self.result
File "gui_work.py", line 7072, in set_scrolled_entries
label_container = tk.Frame(label_frame)
File "/usr/lib/python3.2/tkinter/__init__.py", line 2440, in __init__
Widget.__init__(self, master, 'frame', cnf, {}, extra)
File "/usr/lib/python3.2/tkinter/__init__.py", line 1961, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: bad window path name ".51186448.743854544.743854928.743912592.743912656.743911504.743911568.743912336"
Werde mal die Zeilen durchchecken, vielleicht kann ich dies beheben.
Antworten