Dies ist sehr einfach mit Tkinter zu tun.
Es gibt ein paar Dinge, die diese Arbeit geschehen haben zu machen. Zuerst müssen Sie sicherstellen, dass das Standardverhalten nicht passiert. Das heißt, Sie möchten nicht, dass der Tab eine Registerkarte einfügt und den Fokus auf das nächste Widget verschiebt. Standardmäßig werden Ereignisse von einem bestimmten Widget verarbeitet, bevor das Standardverhalten auftritt (normalerweise in Klassenbindungen). Tk hat einen einfachen eingebauten Mechanismus, um Ereignisse von der weiteren Verarbeitung abzuhalten.
Zweitens müssen Sie sicherstellen, dass Sie den Fokus auf das entsprechende Widget senden. Es gibt eine integrierte Unterstützung, um zu bestimmen, was das nächste Widget ist.
Zum Beispiel:
def focus_next_window(event):
event.widget.tk_focusNext().focus()
return("break")
text_widget=Text(...)
text_widget.bind("<Tab>", focus_next_window)
Wichtige Punkte über diesen Code:
- Verfahren
tk_focusNext()
das nächste Widget in der Tastatur-Traversal-Hierarchie zurück.
- das Verfahren
focus()
den Fokus auf dieses Widget ist in einem kritischen "break"
- Rückkehr setzt, dass sie die Klasse Bindung von Feuern verhindert. Es ist diese Klassenbindung, die das Tabulatorzeichen einfügt, das Sie nicht möchten.
Wenn Sie dieses Verhalten für alle Text-Widgets wollen in einer Anwendung Sie die bind_class()
Methode anstelle von bind()
verwenden können diese Bindung beeinflussen alle Text-Widgets zu machen.
Sie können auch die Bindung Sende Fokus auf eine sehr spezifische Widget haben, aber ich empfehlen, mit der Standard Traversierfolgeliste kleben, dann stellen Sie sicher, die Traversierfolgeliste korrekt ist.
Das return ("break") tipp hat mir gerade den Tag gerettet, danke Bryan! – Symon
Ich hatte eine weitgehend unabhängige Frage darüber, wie einige zusätzliche Schritte in Reaktion auf eine, ** durchgeführt werden, ** ohne ** die von seinem Standardverhalten zu stoppen. Diese Antwort hat es perfekt abgedeckt. Vielen Dank! –
JDM