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