我一直在使用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
变量,直接设置了Name
Property
,自动更新SecondWindow
中的Label
。