Python Kivy:如何在弹出窗口中获取类变量
程序:首先你必须添加一个名字,然后程序将设置一个初学者(函数“umdie()”),然后屏幕“Wurfelbeginn”将显示玩家的名字和他们拥有的号码。 然后点击“Wer beginnt?”按钮查看谁开始 现在我的问题是: 我想在弹出窗口中显示Variablen类中的变量“初学者”,但如果调用该变量,则不会发生任何事情,但控制台会显示正确的名称 我做错了什么 我的main.py代码:Python Kivy:如何在弹出窗口中获取类变量,python,python-3.x,kivy,kivy-language,Python,Python 3.x,Kivy,Kivy Language,程序:首先你必须添加一个名字,然后程序将设置一个初学者(函数“umdie()”),然后屏幕“Wurfelbeginn”将显示玩家的名字和他们拥有的号码。 然后点击“Wer beginnt?”按钮查看谁开始 现在我的问题是: 我想在弹出窗口中显示Variablen类中的变量“初学者”,但如果调用该变量,则不会发生任何事情,但控制台会显示正确的名称 我做错了什么 我的main.py代码: from kivy.app import App from kivy.uix.screenmanager imp
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
from kivy.properties import ObjectProperty, ListProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.uix.popup import Popup
from kivy.core.window import Window
from random import *
class Boxlayout(BoxLayout):
pass
class Textinput(TextInput):
pass
class Variablen():
Spielernamen = []
Beginner = 0
Zweiter = 0
def get_names(self, Namensabfrage):
Name1 = Namensabfrage.name_1.text
Name2 = Namensabfrage.name_2.text
self.Spielernamen.append(Name1)
self.Spielernamen.append(Name2)
print(Variablen.Spielernamen)
def umdie(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 = Variablen.Spielernamen[1]
else:
self.Beginner = self.Spielernamen[1]
self.Zweiter = self.Spielernamen[0]
print(self.Beginner)
print(self.Zweiter)
class Namensabfrage(Screen):
name_1 = ObjectProperty()
name_2 = ObjectProperty()
def save_names(self):
vars = Variablen()
vars.get_names(self)
class Wurfelbeginn(Screen, Variablen):
Spieler1 = StringProperty("")
Spieler2 = StringProperty("")
Würfel1 = randint(1,6)
Würfel2 = randint(1,6)
WürfSp1 = str(Würfel1)
WürfSp2 = str(Würfel2)
def on_pre_enter(self):
self.Spieler1 = str(Variablen.Spielernamen[0] + " würfelt: ")
self.Spieler2 = str(Variablen.Spielernamen[1] + " würfelt: ")
Variablen.umdie(self, Wurfelbeginn)
def open_popup(self):
the_popup = CustomPopup()
the_popup.open()
class CustomPopup(Popup,Variablen):
Beginnertext = StringProperty("")
def on_pre_enter(self):
self.Beginnertext = str(Variablen.Beginner + "fängt an")
print("Hallo")
class Manager(ScreenManager):
namensabfrage = ObjectProperty(None)
wurfelbeginn = ObjectProperty(None)
class ScreensApp(App):
def build(self):
m = Manager(transition=SlideTransition())
return m
if __name__ == "__main__":
ScreensApp().run()
这里是screes.kv:
#:kivy 1.10.0
<Namensabfrage>:
name_1: name1
name_2: name2
Boxlayout:
orientation: 'vertical'
padding: 50
spacing: 50
Label:
text: "gebt hier eure Namen ein"
Textinput:
id: name1
size_hint: (1, .3)
text: ""
multiline: False
Textinput:
id: name2
size_hint: (1, .3)
text: ""
multiline: False
Button:
text: "Bestätigen"
size_hint:(1,.4)
on_press: root.save_names()
Button:
size_hint: (1, .5)
text: "Start"
on_press: root.manager.current = "Screen2"
<Wurfelbeginn>:
Boxlayout:
orientation: 'vertical'
spacing: 20
Button:
text: "Wer beginnt?"
size_hint:(1,.4)
font_size: 20
on_press: root.open_popup()
Label:
text: root.Spieler1
Label:
text: root.WürfSp1
font_size: 30
Label:
text: root.Spieler2
Label:
text: root.WürfSp2
font_size: 30
<CustomPopup>:
size_hint: .5, .5
auto_dismiss: False
title: "Beginner"
BoxLayout:
Label:
text: root.Beginnertext
Button:
text: "schließen"
on_press: root.dismiss()
<Manager>:
id: screen_manager
namensabfrage: Namensabfrage
wurfelbeginn: Wurfelbeginn
Namensabfrage:
id: Namensabfrage
name: "Screen1"
manager: screen_manager
Wurfelbeginn:
id: Wurfelbeginn
name: "Screen2"
manager: screen_manager
#:kivy 1.10.0
:
姓名1:name1
姓名2:姓名2
盒子布局:
方向:“垂直”
填充:50
间距:50
标签:
文字:“gebt的欧洲名称”
文本输入:
id:姓名1
尺寸提示:(1.3)
案文:“”
多行:False
文本输入:
id:姓名2
尺寸提示:(1.3)
案文:“”
多行:False
按钮:
文本:“贝斯特ätigen”
尺寸提示:(1.4)
按:root.save\u names()
按钮:
尺寸提示:(1.5)
正文:“开始”
按:root.manager.current=“Screen2”
:
盒子布局:
方向:“垂直”
间距:20
按钮:
文字:“你是从哪里开始的?”
尺寸提示:(1.4)
字体大小:20
按:root.open\u popup()
标签:
文本:root.Spieler1
标签:
文本:root.WürfSp1
字体大小:30
标签:
文本:root.Spieler2
标签:
文本:root.WürfSp2
字体大小:30
:
大小提示:.5,.5
自动解除:错误
标题:“初学者”
盒子布局:
标签:
文本:根。初学者文本
按钮:
文本:“schließen”
按:root.discouse()
:
id:屏幕管理器
namensabfrage:namensabfrage
伍尔贝格林:伍尔贝格林
姓名、年龄:
id:namensabfage
名称:“屏幕1”
经理:屏幕管理器
伍尔贝金:
id:Wurfelbeginn
名称:“屏幕2”
经理:屏幕管理器
在弹出窗口中显示谁开始
有关详细信息,请参考以下说明、示例和输出
解释
千伏
班
将root.save_names()替换为app.root.variablen.get_names(root),并传递root,以便其他类可以访问新创建的对象variablen
片段
类变量
#:kivy 1.10.0
#:导入SlideTransition kivy.uix.screenmanager.SlideTransition
:
姓名1:name1
姓名2:姓名2
盒子布局:
方向:“垂直”
填充:50
间距:50
标签:
文字:“gebt的欧洲名称”
文本输入:
id:姓名1
尺寸提示:(1.3)
案文:“”
多行:False
文本输入:
id:姓名2
尺寸提示:(1.3)
案文:“”
多行:False
按钮:
文本:“贝斯特ätigen”
尺寸提示:(1.4)
按:app.root.variablen.get\u name(root)
按钮:
尺寸提示:(1.5)
正文:“开始”
按:root.manager.current=“Screen2”
:
盒子布局:
方向:“垂直”
间距:20
按钮:
文字:“你是从哪里开始的?”
尺寸提示:(1.4)
字体大小:20
按:root.open\u popup()
标签:
文本:root.Spieler1
标签:
文本:root.WürfSp1
字体大小:30
标签:
文本:root.Spieler2
标签:
文本:root.WürfSp2
字体大小:30
:
大小提示:.5,.5
自动解除:错误
标题:“初学者”
盒子布局:
方向:“垂直”
标签:
文本:根。初学者文本
按钮:
文本:“schließen”
按:root.discouse()
:
id:屏幕管理器
转换:SlideTransition()
namensabfrage:namensabfrage
伍尔贝格林:伍尔贝格林
姓名、年龄:
id:namensabfage
名称:“屏幕1”
经理:屏幕管理器
伍尔贝金:
id:Wurfelbeginn
名称:“屏幕2”
经理:屏幕管理器
on\u pre\u enter:self.on\u pre\u enter\u回调(app.root.variablen)
输出不起作用。。。。在你的例子中,Adam是初学者,所以他的名字必须作为文本输入。您在Textinput中手动写入了名称“Eve”。这不是问题所在。无论如何,谢谢。还有人有解决办法吗?我已经更新了我的帖子。现在,它将在弹出窗口中显示谁开始(初学者文本)
<Namensabfrage>:
...
Button:
text: "Bestätigen"
size_hint:(1,.4)
on_press: app.root.variablen.get_names(root)
<Manager>:
transition: SlideTransition()
...
Wurfelbeginn:
id: Wurfelbeginn
name: "Screen2"
manager: screen_manager
on_pre_enter: self.on_pre_enter_callback(app.root.variablen)
class Wurfelbeginn(Screen):
...
class CustomPopup(Popup):
class Variablen():
def __init__(self):
self.Spielernamen = []
self.Beginner = ''
self.Zweiter = ''
...
def umdie(self, Wurfelbeginn):
...
elif Wurfelbeginn.Würfel1 == Wurfelbeginn.Würfel2:
...
self.Zweiter = self.Spielernamen[1]
else:
...
class Namensabfrage(Screen):
name_1 = ObjectProperty(None)
name_2 = ObjectProperty(None)
class Wurfelbeginn(Screen):
variablen = ObjectProperty(None)
...
def on_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)
def open_popup(self):
the_popup = CustomPopup(self.variablen)
class CustomPopup(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(ScreenManager):
variablen = ObjectProperty(None)
...
def __init__(self, **kwargs):
super(Manager, self).__init__(**kwargs)
self.variablen = Variablen() # Instantiate object Variablen
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 *
class Boxlayout(BoxLayout):
pass
class Textinput(TextInput):
pass
class Variablen():
def __init__(self):
self.Spielernamen = []
self.Beginner = ''
self.Zweiter = ''
def get_names(self, Namensabfrage):
Name1 = Namensabfrage.name_1.text
Name2 = Namensabfrage.name_2.text
self.Spielernamen.append(Name1)
self.Spielernamen.append(Name2)
print(self.Spielernamen)
def umdie(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)
class Namensabfrage(Screen):
name_1 = ObjectProperty(None)
name_2 = ObjectProperty(None)
class Wurfelbeginn(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)
def on_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)
def open_popup(self):
the_popup = CustomPopup(self.variablen)
the_popup.open()
class CustomPopup(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(ScreenManager):
variablen = ObjectProperty(None)
namensabfrage = ObjectProperty(None)
wurfelbeginn = ObjectProperty(None)
def __init__(self, **kwargs):
super(Manager, self).__init__(**kwargs)
self.variablen = Variablen() # Instantiate object Variablen
class ScreensApp(App):
def build(self):
return Manager()
if __name__ == "__main__":
ScreensApp().run()
#:kivy 1.10.0
#:import SlideTransition kivy.uix.screenmanager.SlideTransition
<Namensabfrage>:
name_1: name1
name_2: name2
Boxlayout:
orientation: 'vertical'
padding: 50
spacing: 50
Label:
text: "gebt hier eure Namen ein"
Textinput:
id: name1
size_hint: (1, .3)
text: ""
multiline: False
Textinput:
id: name2
size_hint: (1, .3)
text: ""
multiline: False
Button:
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: 20
Button:
text: "Wer beginnt?"
size_hint:(1,.4)
font_size: 20
on_press: root.open_popup()
Label:
text: root.Spieler1
Label:
text: root.WürfSp1
font_size: 30
Label:
text: root.Spieler2
Label:
text: root.WürfSp2
font_size: 30
<CustomPopup>:
size_hint: .5, .5
auto_dismiss: False
title: "Beginner"
BoxLayout:
orientation: 'vertical'
Label:
text: root.Beginnertext
Button:
text: "schließen"
on_press: root.dismiss()
<Manager>:
id: screen_manager
transition: SlideTransition()
namensabfrage: Namensabfrage
wurfelbeginn: Wurfelbeginn
Namensabfrage:
id: Namensabfrage
name: "Screen1"
manager: screen_manager
Wurfelbeginn:
id: Wurfelbeginn
name: "Screen2"
manager: screen_manager
on_pre_enter: self.on_pre_enter_callback(app.root.variablen)