Virtuale Tastatur mit Kivy

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Duall777
User
Beiträge: 7
Registriert: Freitag 20. Februar 2015, 13:47

Hallo zusammen,

hab da ein hoffentlich einfaches Problem. :)
Ich habe mit Kivy eine Login-Gui erstellt mit 2 textinputs und 2 labels. Jetzt möchte ich das eine Virtuelle Tastatur angezeigt wird, über die ich in die textinputs etwas reinschreiben kann.
Mein Code sieht wie folgt aus:

Code: Alles auswählen

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.vkeyboard import VKeyboard


class LoginScreen(GridLayout):

    def __init__(self, **kwargs):
        super(LoginScreen, self).__init__(**kwargs)
        vk = VKeyboard(layout='azerty')
        self.cols = 2
        self.add_widget(Label(text='User Name'))
        self.username = TextInput(multiline=False)
        self.add_widget(self.username)
        self.add_widget(Label(text='password'))
        self.password = TextInput(password=True, multiline=False)
        self.add_widget(self.password)
        self.add_widget(vk)

    def focused(self):
        if self.password.focus == True:
            self.vk.on_key_down(self)
        elif self.username.focus == True:
            self.vk.on_key_down(self)


class MyApp(App):
    def build(self):
        return LoginScreen()


if __name__ == '__main__':
    MyApp().run()

class MyApp(App):
    def build(self):
        return LoginScreen()


if __name__ == '__main__':
    MyApp().run() 
Also mit dem Code wird merden mir die labels, die textinputs und die virtuelle tastatur angezeigt. Aber ich weiß nicht genau wie ich es hinbekomme, dass ich über die vir. tastatur eine eingabe machen kann.
hab es über die selbstgeschriebene methode "focused" versucht aber hat leider nicht geklappt.
Hat jemand eine Idee wie man das hinbekommt?

Danke schon mal für euere Hilfe.


Viele Grüße
Duall777
BlackJack

@Duall777: Ich kenne mich mit Kivy nicht aus, aber die `focused()`-Methode wird ziemlich sicher auf die Nase fallen wenn sie versucht auf das `vk`-Attribut zuzugreifen weil es das gar nicht gibt. Du müsstest das in der `__init__()` auch an das Objekt binden und nicht nur einen lokalen Namen dafür vergeben.
Duall777
User
Beiträge: 7
Registriert: Freitag 20. Februar 2015, 13:47

Hi danke für die Antwort,

ich habe das über (zeile 20)

Code: Alles auswählen

self.add_widget(vk)
gemacht. Oder reicht das nicht aus muss ich das irgendwie anders einbinden?
BlackJack

@Duall777: Nein das reicht natürlich nicht aus. Wie sollte dadurch ein `vk`-Attribut entstehen? Die Methode könnte mit normalen Mitteln ja nicht einmal heraus bekommen das der Wert bei ihrem Aufrufer an den lokalen Namen `vk` gebunden ist. Und bei den anderen Objekten bindest Du die ja auch selber explizit an das Objekt, warum sollte das ausgerechnet bei der virtuellen Tastatur anders sein?
Duall777
User
Beiträge: 7
Registriert: Freitag 20. Februar 2015, 13:47

Ok habs jetzt eingebunden mit

Code: Alles auswählen

self.vk = VKeyboard(layout='azerty')
Ist es das wie du es gemeint hast?

Aber auch mit dieser einbindung funktioniert das beschreiben des textinputs nicht. Die Dokumentation ist auch nicht besonders aufschlussreich.
BlackJack

@Duall777: Also gleich der einleitende Satz in der Dokumentation ist IMHO schon aufschlussreich:
http://kivy.org/docs/api-kivy.uix.vkeyboard.html hat geschrieben:VKeyboard is an onscreen keyboard for Kivy. Its operation is intended to be transparent to the user. Using the widget directly is NOT recommended. Read the section Request keyboard first.
Du benutzt das also schon mal nicht so wie's empfohlen wird bzw. so wie es explizit *nicht* empfohlen wird.
fpmr
User
Beiträge: 7
Registriert: Donnerstag 14. Mai 2015, 14:41

@Duall777:

hab gerade das gleiche Problem wie das von Dir beschriebene! Mich würde interessieren wie du dass gelöst hast, da mir die Dokumentation da auch nicht weiterhilft!

Zumal ich beim öffnen des Screens gleich eine Tastatur erstellen will, welche dann für mehrere TextInputs benutzt werden kann indem per Touch oder mit der Maus eins der Inputs angewählt wird wie ich das mit der richtigen Tastatur auch mache!


LG
Antworten