【问题标题】:(Kivy) Updating a class variable(Kivy) 更新类变量
【发布时间】:2020-09-10 08:35:22
【问题描述】:

我一直在使用 kivy 编写代码。在这里,我试图在“EighthWindow”中获取用户的输入,并尝试在“SecondWindow”中获取该变量作为标签。我的方法是将 UN 定义为类变量,然后在输入用户名时通过调用该函数进行更新。然后我在第二个类中获取UN的更新值并将其插入。但是UN没有得到更新。

我对 kivy 以及类和对象的整体概念也很陌生。感谢任何形式的建设性批评和帮助。以下是缩短的代码:

Python 文件

class EighthWindow(Screen): 
    username= ObjectProperty(None)
    password= ObjectProperty(None)
    UN=""
    def change_var(self):
        EighthWindow.UN=self.username.text
        print(EighthWindow.UN)
class SecondWindow(Screen):
    n=EighthWindow.UN
    Name=StringProperty(n)

基维文件

<EighthWindow>:
    name:"Eighth"
    username:username
    password:password
    FloatLayout:
        TextInput:
            id: username
            hint_text:"Username"
            size_hint:0.6,9/40-0.1
            pos_hint:{"top":4/5-0.1,"x":0.2}
            multiline:False
        Button:
            size_hint:0.6,9/40-0.1
            pos_hint:{"top":2/5-0.06,"x":0.2}
            text:"Login"
            on_press:
                root.change_var()
                app.root.current="second"

<SecondWindow>:
    name:"second"
    FloatLayout:
        Label:
            text:root.Name
            pos_hint:{"x":0,"y":0.75}
            size_hint:0.3,0.25

【问题讨论】:

    标签: python user-interface kivy


    【解决方案1】:

    您的代码的唯一问题是使用类变量UN。由于该变量不是Property,因此其他变量(或Properties)在更改时不会自动更新。但是您可以通过更改类定义来绕过UN 变量,如下所示:

    class EighthWindow(Screen):
        username= ObjectProperty(None)
        password= ObjectProperty(None)
        def change_var(self):
            self.manager.get_screen('second').Name = self.username.text
    
    
    class SecondWindow(Screen):
        Name=StringProperty('')
    

    这消除了UN变量,直接设置NameProperty,自动更新SecondWindow中的Label。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多