Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy:如何在弹出窗口中获取类变量_Python_Python 3.x_Kivy_Kivy Language - Fatal编程技术网

Python Kivy:如何在弹出窗口中获取类变量

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

程序:首先你必须添加一个名字,然后程序将设置一个初学者(函数“umdie()”),然后屏幕“Wurfelbeginn”将显示玩家的名字和他们拥有的号码。 然后点击“Wer beginnt?”按钮查看谁开始

现在我的问题是: 我想在弹出窗口中显示Variablen类中的变量“初学者”,但如果调用该变量,则不会发生任何事情,但控制台会显示正确的名称

我做错了什么

我的main.py代码:

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

片段 类变量
  • 因为string将被分配给属性/变量初学者和Zweiter,所以将它们定义为string
  • 修复方法umdie中的键入错误。将self.Zweiter=Variablen.Spielernamen[1]替换为self.Zweiter=self.Spielernamen[1]
  • 添加一个方法\uuu init__
  • 片段 类名SABFRAGE
  • 已删除方法保存名称
  • 已将ObjectProperties(名称\u 1、名称\u 2)初始化为None
  • 片段 Wurfelbeginn类
  • 为新类属性variablen添加ObjectProperty
  • 将\u pre\u enter上的方法重命名为\u pre\u enter\u回调上的自定义方法
  • 将新的ObjectProperty连接到参数variablen
  • 将Variablen重命名为Variablen
  • 将自身传递给umdie方法
  • 将对象self.variablen传递给CustomPopup类
  • 片段 类自定义弹出窗口 为了显示谁是初学者,请添加一个方法uu init_uu来填充类属性,即初学者文本

    片段 班级经理
  • 添加一个ObjectProperty,variablen
  • 添加一个方法\uuu init__
  • 将ObjectProperty(variablen)连接到实例化对象variablen(类variablen)
  • 片段 实例 main.py 千伏
    #: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)