(Kivy) 更新类变量



我一直在使用kivy编写代码。在这里,我尝试从"第八窗口"中的用户那里获取输入,并尝试在"第二窗口"中获取标签的变量。我的方法是将 UN 定义为类变量,然后在输入用户名时通过调用函数进行更新。然后我在第二类中得到联合国的更新值并插入它。但联合国没有得到更新。

我对kivy以及类和对象的整体概念也很陌生。任何建设性的批评和帮助都是值得赞赏的。以下是缩短的代码:

蟒蛇文件

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

代码的唯一问题是使用类变量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

最新更新