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
- Since string will be assigned to the attribute/variable Beginner and Zweiter, define them as string.
- Fix a typo error in method umdie. Replace self.Zweiter = Variablen.Spielernamen[1] with self.Zweiter = self.Spielernamen[1]
- 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
- Removed method save_names.
- Initialized ObjectProperties (name_1, name_2) to None.
Snippets
classNamensabfrage(Screen):
name_1 =ObjectProperty(None)
name_2 = ObjectProperty(None)
class Wurfelbeginn
- Add an ObjectProperty for new class attribute, variablen
- Rename method on_pre_enter to a customized method, on_pre_enter_callback
- Hook up the new ObjectProperty to the argument, variablen
- Renamed Variablen to variablen
- Pass self to method umdie
- 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
- Add an ObjectProperty, variablen
- Add a method __init__
- 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)
Post a Comment for "Kivy: How To Get Class Variables In Popup"