2017-05-26 1 views
0

Hinweis: Ich bin kein Programmierer und kenne nicht die genaue Terminologie, die ich verwenden sollte. Dies ist ein grundlegendes Programm und ich versuche nicht, wörtliche "kivy screens" oder den kivy Screen Manager zu verwenden.Python - Wie füge ich einen zweiten "Bildschirm" zu meiner kivy-Anwendung hinzu?

Ich habe stundenlang auf Google suchen versucht, dieses Problem zu lösen, und ich komme kurz. Ich habe ein Python Kivy Programm. Ich habe den Startbildschirm erstellt. Wenn der Benutzer auf ein bestimmtes Spiel klickt, möchte ich, dass der Bildschirm alle Daten auf dem ersten Bildschirm löscht und dann Schaltflächen und Beschriftungen auf dem Bildschirm platziert. Fast wie ein "neuer" Bildschirm. Ich habe es derzeit, wo es den Bildschirm löscht, wenn ein Benutzer ein Spiel auswählt, aber wenn ich versuche, Schaltflächen zu diesem Bildschirm hinzuzufügen, füllen sie auf dem Hauptbildschirm.

Das ist mein Python-Code:

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.dropdown import DropDown 

class MadLib(Widget): 
    pass 

class MadlibApp(App): 
    def build(self): 
     return MadLib() 

app = MadlibApp() 

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

Hier ist meine .kv Datei:

<MadLib>: 
    canvas: 
     Color: 
      rgba: 0.2, 0.8, 0.2, 1 
     Rectangle: 
      pos: 0, 0 
      size: self.width, self.height 


    Button: 
     tag: 'exit' 
     background_color: 0, 0, 0, 0 
     height: 100 
     width: 100 
     center_x: root.width - self.width/2 
     top: root.top 
     on_press: app.stop() 
     Image: 
      source: r"C:\Users\kraak\Desktop\Python\Python\basicexitbutton.gif" 
      top: root.top 
      center_x: root.width - self.width/2 
      size_hint_y: None 
      height: '96dp' 

    Button: 
     tag: 'menu' 
     background_color: 0, 0, 0, 0 
     id: btn 
     top: root.top - 10 
     center_x: self.width/2 + 10 
     on_release: dropdown.open(self) 
     size_hint_y: None 
     height: '48dp' 
     width: '175dp' 
     Image: 
      source: r"C:\Users\kraak\Desktop\Python\Python\basicmenubutton.gif" 
      top: root.top + 10 
      center_x: self.width/2 
      size_hint_y: None 
      height: '96dp' 

    Widget: 
     on_parent: dropdown.dismiss() 

    DropDown: 

     id: dropdown 
     on_select: btn.text = '{}'.format(args[1]) 

     Button: 
      center_x: self.width/2 
      text: 'Browse' 
      font_size: '32' 
      background_color: 0, 0 ,0, 0 
      size_hint_y: None 
      height: '48dp' 
      on_release: dropdown.select('A') 

     Button: 
      text: 'Categories' 
      font_size: '32' 
      background_color: 0, 0 ,0, 0 
      size_hint_y: None 
      height: '48dp' 
      on_release: dropdown.select('B') 

     Button: 
      text: 'Settings' 
      font_size: '32' 
      background_color: 0, 0 ,0, 0 
      size_hint_y: None 
      height: '48dp' 
      on_release: dropdown.select('C') 

    Button: 
     text: 'Game 1' 
     font_size: '32' 
     background_color: 0, 0 ,0, 0 
     size_hint_y: None 
     height: '48dp' 
     top: root.top/1.33 
     center_x: root.width/4 
     on_press: root.clear_widgets() 

    Button: 
     text: 'Game 2' 
     font_size: '32' 
     background_color: 0, 0 ,0, 0 
     size_hint_y: None 
     height: '48dp' 
     top: root.top/1.66 
     center_x: root.width/4 
     on_release: dropdown.select('C') 

<Game1>: 
    Button: 
     id: tst 
     text: 'Test' 
     font_size: '32' 
     background_color: 0, 0 ,0, 0 
     size_hint_y: None 
     height: '48dp' 
     top: root.top 
     center_x: root.width/4 

Wenn der Benutzer auf Spiel klickt 1, würde ich es gerne, um das Spiel 1 Klasse zu springen aber es kann nicht, weil das Programm nicht weiß, dass es noch existiert. Ich bin mir nicht sicher, wie ich das beheben soll.

Antwort

1

Sie sprechen über Bildschirme, scheinen aber keine tatsächlichen Kivy-Bildschirme zu verwenden. Sie müssen eine ScreenManager haben und dann separate Screen Objekte erstellen, auf die Sie Ihre Widgets setzen können.

Es ist buchstäblich das erste Ergebnis, wenn Sie google "kivy screens", bitte machen Sie Ihre Hausaufgaben das nächste Mal.

Hier ist eine kurze Anleitung, wie Sie Ihren bestehenden Code in etwas konvertieren, das Bildschirme korrekt verwendet. Betrachten Sie den folgenden Code .kv haben:

<[email protected]>: 
    text: "I'm first" 

<[email protected]>: 
    text: "I'm second..." 

Sie wollen die ersten Schaltfläche auf einem anderen auf einem Bildschirm und die zweite sein. Erstens, machen Sie sie zu einem Screen. Normalerweise ändern Sie einfach das Root-Widget auf einen Bildschirm und verschieben alle anderen Widgets auf den Bildschirm. Das Beispiel sieht jetzt so aus:

<[email protected]>: 
    name: "first_screen" # a name is like an id but only for the screen manager 
    Button: 
     text: "I'm first" 

<[email protected]>: 
    name: "second_screen" 
    Button: 
     text: "I'm second..." 

Sie benötigen jetzt einen Bildschirmmanager. Fügen Sie alle Bildschirme hinzu, die Sie verwenden möchten. Ich werde es zum Root-Widget machen. Ich mache es auch so, dass das Drücken der Taste auf dem ersten Bildschirm zum zweiten Bildschirm wechselt und umgekehrt:

ScreenManager: 
    First: 
    Second: 

<[email protected]>: 
    name: "first_screen" 
    Button: 
     text: "I'm first" 
     # root.manager.current is magic that gives you the current screen manager 
     on_release: root.manager.current = "second_screen" 

<[email protected]>: 
    name: "second_screen" 
    Button: 
     on_release: root.manager.current = "first_screen" 
     text: "I'm second..." 

Das ist es! Sie können die Übergangstypen und andere Details ändern, werfen Sie einen Blick auf die docs.

Um einen Blick auf dieses Beispiel ausführen, um diese Py-Datei zu nehmen:

from kivy.base import runTouchApp 
from kivy.lang import Builder 

runTouchApp(Builder.load_string(""" 
ScreenManager: 
    First: 
    Second: 

<[email protected]>: 
    name: "first_screen" # a name is like an id but only for the screen manager 
    Button: 
     text: "I'm first" 
     # root.manager.current is magic that gives you the current screen manager 
     on_release: root.manager.current = "second_screen" 

<[email protected]>: 
    name: "second_screen" 
    Button: 
     on_release: root.manager.current = "first_screen" 
     text: "I'm second..." 
      """)) 
+0

Ich bin nicht wörtliche Bildschirme zu verwenden versuchen. Ich muss nur ein Basisprogramm machen und es so einfach wie möglich halten. Ich bin kein Erfahrungsprogrammierer, deshalb kenne ich nicht die genaue Terminologie, die ich verwenden sollte. –

+0

Mach dir keine Sorgen, es ist wirklich einfach. Und die Terminologie ist einfach: Es gibt ein ScreenManager-Widget, das nur einen Bildschirm enthalten kann. Dann gibt es Bildschirm, der alle Widgets enthalten kann, die Sie bereits haben. Sehen Sie sich einige [Beispiele] an (https://kivy.org/docs/api-kivy.uix.screenmanager.html#basic-usage). Sie müssen keinen Code ändern, nur etwa 10-15 Zeilen. Antworten, wenn feststecken. –

+0

Danke. Ich nehme an, ich werde es versuchen. Vielleicht wird es mir helfen, das Programm für mein nächstes Semester weiter zu entwickeln. –

Verwandte Themen