2016-07-15 11 views
1

Ich versuche eine GUI zu erstellen, indem ich die Vorlage des ComicCreator GUI Beispiels als Vorlage für mein eigenes Projekt implementiere. Die code ist einfach zu folgen, aber ich möchte in der Lage sein, den drawingspace.kv neu zu konfigurieren, jedesmal, wenn eine Taste gedrückt wird, sagen wir zum Beispiel etwas wie folgt aus:Wie ändert man ein Leerzeichen, wenn eine Taste mit Kivy gedrückt wird?

enter image description here

F: Wie könnte ich konfigurieren die drawingspace.kv ein anderes Layout mit verschiedenen Widgets für jede Taste, die gedrückt wird, zu haben?

Antwort

2

Eine gute Möglichkeit, dies zu tun, ist Bildschirm zu verwenden.

Da ich bereits ein Beispiel für diese App von Ihnen früher Frage hatte, war es einfach, die Bildschirme zu implementieren, und schreiben Sie die Klassen ein wenig.

Wenn eine Schaltfläche gedrückt wird, legen Sie den aktuellen Wert des Screenmanagers auf den von Ihnen gewünschten Namen fest.

Dann bearbeiten Sie einfach die Layouts, wie Sie wollen in jedem Bildschirm, in der kv-Datei oder Python-Datei.

Ich entscheide mich, die meisten Layout-Sachen in kv-Sprache hier zu machen. Weil ich es einfacher finde, ein Layout so zu entwickeln, wie ich es möchte. Später könnte ich es in Python umschreiben, wenn ich das will.

So sieht meine Python-Datei wie folgt nun:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.clock import Clock 
from kivy.uix.screenmanager import Screen,ScreenManager,NoTransition 
from kivy.lang import Builder 
import time 


Builder.load_file("kv.kv") 


class MyLayout(BoxLayout): 

    def __init__(self,**kwargs): 
     super(MyLayout,self).__init__(**kwargs) 
     self.orientation = "vertical" 
     self.padding = 10 


class MainScreen(Screen): 
    pass 


class RemoveScreen(Screen): 
    pass 


class GroupScreen(Screen): 
    pass 


class MyLogo(BoxLayout): 

    your_time = StringProperty() 
    def __init__(self,**kwargs): 
     super(MyLogo,self).__init__(**kwargs) 
     Clock.schedule_interval(self.set_time, 0.1) 

    def set_time(self,dt): 
     self.your_time = time.strftime("%m/%d/%Y %H:%M") 




class MyApp(App): 
    def __init__(self,**kwargs): 
     super(MyApp,self).__init__(**kwargs) 
     self.sm = ScreenManager(transition=NoTransition()) 

     self.sm.add_widget(MainScreen(name = "main")) 
     self.sm.add_widget(RemoveScreen(name = "remove")) 
     self.sm.add_widget(GroupScreen(name = "group")) 

     self.sm.current = "main" 

    def build(self): 
     return self.sm 


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

Und kv.kv Datei sieht wie folgt aus:

#:kivy 1.9.1 

<[email protected]>: 
    padding: 10,10,10,0 
    spacing: 10 
    size_hint: 1,0.3 
    orientation: "horizontal" 
    Button: 
     text: "Clear" 
     on_press: app.sm.current = "main" 
    Button: 
     text: "Remove" 
     on_press: app.sm.current = "remove" 
    Button: 
     text: "Group" 
     on_press: app.sm.current = "group" 
    Button: 
     text: "Color" 
    Button: 
     text: "Gestures" 

<MyLogo>: 
    spacing: 10 
    padding: 10,10,10,0 
    orientation: "horizontal" 
    BoxLayout: 
     orientation: "vertical" 
     size_hint: 0.3,1 
     canvas: 
      Rectangle: 
       pos: self.pos 
       size: self.size 
     AsyncImage 
      source: 'http://lmsotfy.com/so.png' 
     Label: 
      size_hint: 1,0.3 
      text: root.your_time 
      color: [0,0,0,1] 
     Label: 
      size_hint: 1,0.3 
      text: "NYC, New York, USA" 
      color: [0,0,0,1] 


<MainScreen>: 
    MyLayout: 
     MyLogo: 
      #Button: 
      # text: "main" 

     MyButtons: 
      #buttons 

     BoxLayout: 
      padding: 10,10,10,10 
      size_hint: 1,0.3 
      Button: 
       text: "Total figures: 1   Kivy Started" 


<RemoveScreen>: 
    MyLayout: 
     MyLogo: 
      BoxLayout: 
       orientation: "horizontal" 
       Label: 
        font_size: "40sp" 
        text: "Remove" 
       Button: 
        font_size: "20sp" 
        text: "Remove this or something" 

     MyButtons: 
      #buttons 

     BoxLayout: 
      padding: 10,10,10,10 
      size_hint: 1,0.3 
      Button: 
       text: "Total figures: 1   Kivy Started" 


<GroupScreen>: 
    MyLayout: 
     MyLogo: 
      BoxLayout: 
       orientation: "vertical" 
       Label: 
        font_size: "40sp" 
        text: "Group" 
       Button: 
        font_size: "20sp" 
        text: "Something groups stuff" 

     MyButtons: 
      #buttons 

     BoxLayout: 
      padding: 10,10,10,10 
      size_hint: 1,0.3 
      Button: 
       text: "Total figures: 1   Kivy Started" 
+0

Ist 'kv.kv' eine neue Datei zusätzlich zu Dateien im [Beispiel] (https://www.packtpub.com/packtlib/book/Application-Development/9781785286926/1/ch01lvl1sec13/Our%20project%20% 20Comic% 20Creator)? – 3kstc

+0

@ 3kstc ja und es wird von Python in Zeile 10 in der .py-Datei geladen. 'Builder.load_file (" kv.kv ")' – EL3PHANTEN

+0

Sie sind ein Geschenk des Himmels! – 3kstc

0

Der Layoutrahmen sollte a screen manager und jedes Layout a screen sein. Bildschirmübergänge würden dann durch Drücken der Tasten ausgelöst. Sie können auch ein Tutorial sehen here, wenn Sie nicht wissen, wie dies zu tun ist, aber die Dokumentation sollte ausreichen.

+0

Danke, ich hatte eigentlich ein vor der Veröffentlichung durchlesen .... aber ich habe das * wie man es * im [code] (https://www.packtpub.com/packtlib/book/Application-Development/9781785286926/1/ch01lvl1sec13/Our%20project%20%20Comic % 20Creator). – 3kstc