Skip to content Skip to sidebar Skip to footer

Kivy: How To Get Class Variables In Popup

procedure: First you have to add a Name and than the Programm will set a Beginner (function 'umdie()') after that the Screen 'Wurfelbeginn' will Show you the names of the Players a

Solution 1:

Display Who Starts in Popup Window

Please refer to the following explanations, example, and output for details.

Explanations

screens.kv

class <Namensabfrage>

Replace root.save_names() with app.root.variablen.get_names(root), and pass root so that the newly created object, Variablen is accessible by the other classes.

Snippets

<Namensabfrage>:...Button:text:"Bestätigen"size_hint:(1,.4)on_press:app.root.variablen.get_names(root)

class <Manager>

Add a call to customized method, on_pre_enter_callback and pass the newly created object, app.root.variablen so that it is accessible by the other classes.

Snippets

<Manager>:transition:SlideTransition()...Wurfelbeginn:id:Wurfelbeginnname:"Screen2"manager:screen_manageron_pre_enter:self.on_pre_enter_callback(app.root.variablen)

main.py

Mulitple Inheritance

There is no need for multiple inheritance. Removed "Variablen" from classes.

classWurfelbeginn(Screen):
...
classCustomPopup(Popup):

class Variablen

  1. Since string will be assigned to the attribute/variable Beginner and Zweiter, define them as string.
  2. Fix a typo error in method umdie. Replace self.Zweiter = Variablen.Spielernamen[1] with self.Zweiter = self.Spielernamen[1]
  3. Add a method __init__

Snippets

classVariablen():
    def__init__(self):
        self.Spielernamen = []
        self.Beginner = ''
        self.Zweiter = ''
...
    defumdie(self, Wurfelbeginn):
        ...
        elif Wurfelbeginn.Würfel1 == Wurfelbeginn.Würfel2:
          ...
          self.Zweiter = self.Spielernamen[1]
        else:
          ...

class Namensabfrage

  1. Removed method save_names.
  2. Initialized ObjectProperties (name_1, name_2) to None.

Snippets

classNamensabfrage(Screen):
    name_1 =ObjectProperty(None)
    name_2 = ObjectProperty(None)

class Wurfelbeginn

  1. Add an ObjectProperty for new class attribute, variablen
  2. Rename method on_pre_enter to a customized method, on_pre_enter_callback
  3. Hook up the new ObjectProperty to the argument, variablen
  4. Renamed Variablen to variablen
  5. Pass self to method umdie
  6. Pass object, self.variablen to class CustomPopup

Snippets

classWurfelbeginn(Screen):
    variablen = ObjectProperty(None)
    ...

    defon_pre_enter_callback(self, variablen):
        self.variablen = variablen
        self.Spieler1 = str(variablen.Spielernamen[0] + " würfelt: ")
        self.Spieler2 = str(variablen.Spielernamen[1] + " würfelt: ")
        variablen.umdie(self)

    defopen_popup(self):
        the_popup = CustomPopup(self.variablen)

class CustomPopup

In order to display who is the beginner, add a method __init__ to populate the class attribute, Beginnertext.

Snippets

classCustomPopup(Popup):
    Beginnertext = StringProperty('')

    def__init__(self, variablen, **kwargs):
        super(CustomPopup, self).__init__(**kwargs)
        self.Beginnertext = str(variablen.Beginner + " fängt an")
        print(self.Beginnertext)
        print("Hallo")

class Manager

  1. Add an ObjectProperty, variablen
  2. Add a method __init__
  3. Hook up the ObjectProperty (variablen) to instantiated object, Variablen (class Variablen).

Snippets

classManager(ScreenManager):
    variablen = ObjectProperty(None)
    ...

    def__init__(self, **kwargs):
        super(Manager, self).__init__(**kwargs)
        self.variablen = Variablen()     # Instantiate object Variablen

Example

main.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.uix.popup import Popup
from random import *


classBoxlayout(BoxLayout):
    passclassTextinput(TextInput):
    passclassVariablen():
    def__init__(self):
        self.Spielernamen = []
        self.Beginner = ''
        self.Zweiter = ''defget_names(self, Namensabfrage):
        Name1 = Namensabfrage.name_1.text
        Name2 = Namensabfrage.name_2.text
        self.Spielernamen.append(Name1)
        self.Spielernamen.append(Name2)
        print(self.Spielernamen)

    defumdie(self, Wurfelbeginn):
        if Wurfelbeginn.Würfel1 > Wurfelbeginn.Würfel2:
          self.Beginner = self.Spielernamen[0]
          self.Zweiter = self.Spielernamen[1]

        elif Wurfelbeginn.Würfel1 == Wurfelbeginn.Würfel2:
          self.Beginner = self.Spielernamen[0]
          self.Zweiter = self.Spielernamen[1]
        else:
          self.Beginner = self.Spielernamen[1]
          self.Zweiter = self.Spielernamen[0]

        print(self.Beginner)
        print(self.Zweiter)


classNamensabfrage(Screen):
    name_1 = ObjectProperty(None)
    name_2 = ObjectProperty(None)


classWurfelbeginn(Screen):
    variablen = ObjectProperty(None)
    Spieler1 = StringProperty('')
    Spieler2 = StringProperty('')
    Würfel1 = randint(1, 6)
    Würfel2 = randint(1, 6)
    WürfSp1 = str(Würfel1)
    WürfSp2 = str(Würfel2)

    defon_pre_enter_callback(self, variablen):
        self.variablen = variablen
        self.Spieler1 = str(variablen.Spielernamen[0] + " würfelt: ")
        self.Spieler2 = str(variablen.Spielernamen[1] + " würfelt: ")
        variablen.umdie(self)

    defopen_popup(self):
        the_popup = CustomPopup(self.variablen)
        the_popup.open()


classCustomPopup(Popup):
    Beginnertext = StringProperty('')

    def__init__(self, variablen, **kwargs):
        super(CustomPopup, self).__init__(**kwargs)
        self.Beginnertext = str(variablen.Beginner + " fängt an")
        print(self.Beginnertext)
        print("Hallo")


classManager(ScreenManager):
    variablen = ObjectProperty(None)
    namensabfrage = ObjectProperty(None)
    wurfelbeginn = ObjectProperty(None)

    def__init__(self, **kwargs):
        super(Manager, self).__init__(**kwargs)
        self.variablen = Variablen()     # Instantiate object VariablenclassScreensApp(App):

    defbuild(self):
        return Manager()


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

screens.kv

#:kivy 1.10.0#:import SlideTransition kivy.uix.screenmanager.SlideTransition<Namensabfrage>:name_1:name1name_2:name2Boxlayout:orientation:'vertical'padding:50spacing:50Label:text:"gebt hier eure Namen ein"Textinput:id:name1size_hint:(1,.3)text:""multiline:FalseTextinput:id:name2size_hint:(1,.3)text:""multiline:FalseButton:text:"Bestätigen"size_hint:(1,.4)on_press:app.root.variablen.get_names(root)Button:size_hint:(1,.5)text:"Start"on_press:root.manager.current="Screen2"<Wurfelbeginn>:Boxlayout:orientation:'vertical'spacing:20Button:text:"Wer beginnt?"size_hint:(1,.4)font_size:20on_press:root.open_popup()Label:text:root.Spieler1Label:text:root.WürfSp1font_size:30Label:text:root.Spieler2Label:text:root.WürfSp2font_size:30<CustomPopup>:size_hint:.5,.5auto_dismiss:Falsetitle:"Beginner"BoxLayout:orientation:'vertical'Label:text:root.BeginnertextButton:text:"schließen"on_press:root.dismiss()<Manager>:id:screen_managertransition:SlideTransition()namensabfrage:Namensabfragewurfelbeginn:WurfelbeginnNamensabfrage:id:Namensabfragename:"Screen1"manager:screen_managerWurfelbeginn:id:Wurfelbeginnname:"Screen2"manager:screen_manageron_pre_enter:self.on_pre_enter_callback(app.root.variablen)

Output

Post a Comment for "Kivy: How To Get Class Variables In Popup"