如果我第一次点击一切都有效,但从第二次开始,on_press
期间不再发生任何事情。我期待着出现"你的名字是......"再次。为什么我的标签再次出现?如何使用StringProperty方法再次获取它?
py文件:
#!/usr/bin/env python3
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
class Login(BoxLayout):
outpt = StringProperty()
def access_widget_1(self,inpt_name):
self.outpt = 'Your name is : ' + inpt_name
def access_widget_2(self,inpt_pwd):
self.ids["outputlabel"].text = 'Your password is: ' + inpt_pwd
class WidgetAccessApp(App):
def build(self):
return Login()
if __name__ == '__main__':
WidgetAccessApp().run()
widgetaccess.kv:
<Login>:
BoxLayout:
orientation: 'vertical'
TextInput:
id: inpt_name
TextInput:
id: inpt_pwd
Button:
text: "Run!"
on_press: root.access_widget_1(inpt_name.text)
on_release: root.access_widget_2(inpt_pwd.text)
Label:
id: outputlabel
text: root.outpt
我在我的kv文件中尝试使用outpt: outpt
,但这导致了NameError。
答案 0 :(得分:1)
尝试在两种方法中按属性访问标签:
def access_widget_1(self,inpt_name):
self.outpt = 'Your name is : ' + inpt_name
def access_widget_2(self,inpt_pwd):
self.outpt = 'Your password is: ' + inpt_pwd
答案 1 :(得分:1)
很简单:
第一次运行代码时: 它将按预期工作,因为逻辑就在那里。
但是,在你调用函数access_widget_2(self,inpt_pwd)
后,发生了一些事情:
原来:
outputlabel.text = root.outpt
它会使绑定事件发生,
调用后:
outputlabel.text = "Your password is blahblahblah"
outputlabel.text
只是一个普通的字符串。实际上,如果您更改第二个文本输入中的文本。您会注意到它确实发生了变化,但仅适用于access_widget_2
这就是为什么它在第一次之后似乎不起作用,并且修复就像:
一样简单def access_widget_2(self,inpt_pwd):
self.outpt = 'Your password is: ' + inpt_pwd
为什么现在有效?因为你这次没有打破绑定。