[kivy] Dropdown Menü in py-Datei erstellen und in kv-Datei aufrufen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
dunkelton
User
Beiträge: 1
Registriert: Montag 31. August 2020, 09:27

Hallo zusammen,

ich bin erst kürzlich in die Welt des Codings wirklich eingetaucht und fühle mich in Python sehr wohl :-) Für mein aktuelles Projekt möchte ich ein GUI mit kivy schreiben. Aktuell scheitere ich allerdings bei der Erstellung eines Dropdown Menüs.
Ich versuche das Dropdown Menü innerhalb einer Screen-Klasse in meiner kv-Datei zu platzieren. Die Punkte/Buttons des Dropdownmenüs erzeuge ich mit einem loop in meiner py-Datei innerhalb der Hauptklasse des Screens. Dieser Loop liegt in einer Funktion innerhalb der Klasse. Mein Gedanke war es nun einen Button in der kv-Datei zu schreiben, der diese Funktion aufruft. Mein Ansatz erzeugt keine Fehlermeldung allerdings funktioniert sie auch nicht ... Ich habe als alternative auch schon überlegt (da das Dropdown-Menü in jedem Screen platziert wird), ob es seine eigene Hauptklasse in der py-Datei kriegt, da weiß ich aber ebenso wenig, wie ich diese richtig in der kv-Datei aufrufe.

Hier ist mein Python Code:

Code: Alles auswählen

# --- --- --- --- --- Import Area --- --- --- --- --- #
from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window

# --- --- --- --- --- Default Window Size --- --- --- --- --- #
Window.size = (750, 750)

# --- --- --- --- --- Dictionary of given projects --- --- --- --- --- #
projekte_liste = {"ID01": "Project01",
                  "ID02": "Project02",
                  "ID03": "Project03",
                  "ID04": "Project04",
                  "ID05": "Project05"}


# --- --- --- --- --- Class definition of screens --- --- --- --- --- #
class OverView(Screen):
    ProjektDropdown = DropDown()

    # --- DropDown Menu function --- #
    def dropdown_menu(self):
        self.ProjektDropdown = DropDown()
        for projekt_id, projekt_name in projekte_liste.items():
            btn = Button(text=projekt_id + " - " + projekt_name, size_hint_y=None, height=25)
            btn.bind(on_release=lambda btn: self.ProjektDropdown.select(btn.text))
            self.ProjektDropdown.add_widget(btn)


# --- --- --- --- --- Class definition of ScreenManager to manage screens (later) --- --- --- --- --- #
class WindowManager(ScreenManager):
    pass


# --- --- --- --- --- App class --- --- --- --- --- #
class TestApp(App):
    pass


# --- --- --- --- --- Start App! --- --- --- --- --- #
if __name__ == "__main__":
    TestApp().run()
und hier mein kv-Code:

Code: Alles auswählen

#:kivy 1.11.1

WindowManager:
    OverView:


<OverView>:
    name: "overview"

    GridLayout:
        cols:3
        row_force_default: True
        row_default_height: 40
        height: self.minimum_height

        Button:
            text:"Projekt auswählen"
            on_release: root.dropdown_menu()

        Button:
            text:"Neues Thema erstellen"

        Button:
            text:"Info"
Einmal ganz reduziert auf das eigentliche Problem.
Vielen Dank im Voraus für eure Antworten/Hilfe :-)
poldi
User
Beiträge: 20
Registriert: Sonntag 19. April 2020, 08:35

Ja gut, das ist wohl Geschmacksache, ich habe die Erfahrung gemacht, das es nicht so ganz einfach ist ein Kivy Project zu strukturieren und mit Ordnern zu organisieren, da muss man schon ein wenig kreativ werden. Daher würde ich als Anfänger erstmal alles zusammen belassen und später auseinander ziehen.
Antworten