错误的on_release on_press或小部件访问从第二次单击

时间:2017-04-30 10:03:54

标签: kivy

如果我第一次点击一切都有效,但从第二次开始,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。

2 个答案:

答案 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

为什么现在有效?因为你这次没有打破绑定。