WinFuture-Forum.de: Python Programmierung mit Kivy - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Python Programmierung mit Kivy Fehler mit Kivy Erweiterung für Python


#1 Mitglied ist offline   1234567890 

  • Gruppe: aktive Mitglieder
  • Beiträge: 21
  • Beigetreten: 15. März 13
  • Reputation: 0

  geschrieben 29. Mai 2016 - 15:50

Hallo,

für die Schule sollen wir in Gruppen etwas 'Beliebiges' in der besten aller Programmiersprachen, Python programmieren.
In meiner Gruppe haben wir uns dazu entschieden, ein RPG in Draufsicht zu erstellen. Zur Umsetzung haben wir uns für die Erweiterung Kivy entschieden, da sich solcher Code angeblich sehr leicht in APKs umwandeln lässt (was bei uns auch funktioniert hat).
Beim Versuch ein Menü zu erstellen ist bei uns folgendes herausgekommen (Das Dateieinlesen/beschreiben diente nur zur Fehlerbeseitigung):

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.modules import keybinding
from kivy.core.window import Window


class Main(FloatLayout):

    def __init__(self, **kwargs):
        super(Main, self).__init__(**kwargs)
        self.StartScreen(1)
        
    def StartScreen(self, instance):
        #
        fobj = open("mode.txt", "w")
        fobj.write("1")
        fobj.close()
        #
        self.clear_widgets()
        print("StartScreen")
        btn1 = Button(text="Play", font_name="BDRENAIS.ttf", font_size=80, size_hint=(.5, .1), pos_hint=({'center_x': .5, 'center_y': .8}), background_normal='btn.png', background_down='btn_pressed.png', border=(0,0,0,0))
        btn1.bind(on_release=self.start)
        self.add_widget(btn1)

        btn2 = Button(text="Options", font_name="BDRENAIS.ttf", font_size=80, size_hint=(.5, .1), pos_hint=({'center_x': .5, 'center_y': .5}), background_normal='btn.png', background_down='btn_pressed.png', border=(0,0,0,0))
        btn2.bind(on_release=self.optionen)
        self.add_widget(btn2)

        btn3 = Button(text="Exit", font_name="BDRENAIS.ttf", font_size=80, size_hint=(.5, .1), pos_hint=({'center_x': .5, 'center_y': .2}), background_normal='btn.png', background_down='btn_pressed.png', border=(0,0,0,0))
        btn3.bind(on_release=self.stop)
        self.add_widget(btn3)
        return True
        
    def start(self, instance):
        #
        fobj = open("mode.txt", "w")
        fobj.write("2")
        fobj.close()
        fobj = open("mode.txt", "r")
        mode = fobj.read()
        fobj.close()
        #
        self.clear_widgets()
        print("start")
        if mode == "2":
            self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
            self._keyboard.bind(on_key_down = self._on_keyboard_down)
    def _keyboard_closed(self):
        #
        fobj = open("mode.txt", "r")
        mode = fobj.read()
        fobj.close()
        #
        if mode == "2":
            self._keyboard.unbind(on_key_down = self.start._on_keyboard_down)
            self._keyboard = None
    def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
        #
        fobj = open("mode.txt", "r")
        mode = fobj.read()
        fobj.close()
        #
        if mode == "2":
            if keycode[1] == 'p':
                btnback = Button(text="Zurueck", font_name="BDRENAIS.ttf", font_size=80, size_hint=(.5, .1), pos_hint=({'center_x': .5, 'center_y': .2}), background_normal='btn.png', background_down='btn_pressed.png', border=(0,0,0,0))
                btnback.bind(on_release=self.StartScreen)
                self.add_widget(btnback)
      
    def optionen(self, instance):
        #
        fobj = open("mode.txt", "w")
        fobj.write("3")
        fobj.close()
        #
        self.clear_widgets()
        print("options")
        btnback = Button(text="Zurueck", font_name="BDRENAIS.ttf", font_size=80, size_hint=(.5, .1), pos_hint=({'center_x': .5, 'center_y': .2}), background_normal='btn.png', background_down='btn_pressed.png', border=(0,0,0,0))
        btnback.bind(on_release=self.StartScreen)
        self.add_widget(btnback)
        
    def stop(self, instance):
        #
        fobj = open("mode.txt", "w")
        fobj.write("4")
        fobj.close()
        #
        self.clear_widgets()
        print("stop")
        exit()

class Ini(App):
    def build(self):
        return Main()
Ini().run()



Nun das Problem: Die einzelnen Funktionen laufen im Hintergrund weiter, was dazu führt, dass man, wenn man auf Play drückt, 'P' drückt, auf Zurueck drückt, wieder 'P' drückt und dann wieder auf Play drücken möchte, einen Error erhält.

Ich hoffe ihr habt irgendwelche hilfreichen Ideen zur Lösung des Problems. ('Nutzt doch Pygame' ist nicht hilfreich =) )

MfG
Julian
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 29. Mai 2016 - 18:49

Wenn die Funktionen im Hintergrund weiterlaufen...

... einfach beim Knopfdruck prüfen, OB und WAS da im Hintergrund läuft, und das dann pauschal terminieren. :)
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   1234567890 

  • Gruppe: aktive Mitglieder
  • Beiträge: 21
  • Beigetreten: 15. März 13
  • Reputation: 0

geschrieben 29. Mai 2016 - 20:00

Das Problem liegt ja darin, dass die Funktionen im Hintergrund laufen, wenn sie einmal gestartet werden, weiß ich nicht wie ich sie wieder beenden kann... Sonst würde ich sie ja gerne jedes mal wenn eine andere Funktion aufgerufen wird beenden :3
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0