Ich schreibe eine App mit dem Kivy-Framework und stolperte über ein kleines, aber lästiges Problem: Ich weiß nicht, wie man Tasten Tab / Enter / Pfeil in Textfeldern bedient, so dass man entweder drückt von ihnen würde ein Ereignis, z. wechseln Sie den Fokus (Sprung) zu einem anderen TextInput oder starten Sie etwas wie send_form()
Könnte jemand bitte etwas Licht in dieses Thema bringen?
Wie von Daniel Kinsman in seinem Kommentar vorgeschlagen, könnten Sie TextInput ableiten, "vorherige" und "nächste" ObjectProperties für die Tab-Unterstützung hinzufügen (einfach in kv mit Verweisen auf andere Widgets setzen) und die Tastaturereignisse anders handhaben. Momentan gibt es dafür keine Unterstützung, aber wenn Sie an einer solchen Modifikation arbeiten möchten, lassen Sie uns eine Feature-Anfrage zukommen oder besprechen Sie sie in #kivy auf freenode.
Vielleicht wäre es sogar besser, eine solche Unterstützung für ein Widget hinzuzufügen und eine Fokuslogik hinzuzufügen, so dass Tab / Enter-Effekte Auswirkungen auf jedes aktivierbare Widget haben und einige Widgets wie der Slider auch die Tasten rechts / links / hoch / runter verwenden / p>
Es gibt also noch eine Menge zu tun in Kivy, und wenn Sie daran interessiert sind zu helfen, können Sie es wirklich schneller machen, wir werden Ihnen helfen:)
Kivy 1.9 bietet die Möglichkeit, write_tab: False
für Texteingaben festzulegen ( siehe Dokumentation ), was dazu führt, dass sich die Tabulatortaste auf das nächste fokussierbare Widget konzentriert.
Kivy erlaubt es der Eingabetaste, Ereignisse zu senden, indem multiline: False
und on_text_validate: root.foo()
festgelegt werden.
Um ein Texteingabe-Widget mit der gewünschten Eingabe- und Tab-Funktionalität zu erstellen, gehen Sie wie folgt vor:
%Vor% Ich habe gerade diese alte Frage gefunden und dachte, ich würde dazu beitragen. Ich brauchte auch Tab / Enter, um zum nächsten Feld zu gehen. Ich habe getan, was @tshirtman vorgeschlagen hat. Dies ist meine benutzerdefinierte TextInput
-Klasse:
Damit können Sie next
übergeben, wenn Sie die Eingabe instanziieren, oder alternativ set_next
für eine vorhandene Eingabe aufrufen.
9 und 13 sind die Tastencodes für Tab und Enter.
Funktioniert gut für mich.