如何使用Python和kivy输入条件语句?

时间:2016-11-04 11:00:40

标签: python kivy

我是kivy的新手。我正在使用python和kivy编写以下代码,这是一个非常简单的代码,询问用户他/她的名字和饥饿程度。

import kivy #import kivy module
kivy.require('1.0.6') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout  
from kivy.uix.textinput import TextInput  

class human(GridLayout):
    #This is a human class
    def __init__(self, **kwargs):
        super(human, self).__init__(**kwargs)
        self.cols = 2 
        self.add_widget(Label(text='Enter your name')) 
        self.name = TextInput(multiline=False) 
        self.add_widget(self.name)
        self.add_widget(Label(text='Enter your hunger level(0-10)'))
        self.hunger = TextInput(multiline=False)
        self.add_widget(self.hunger)

class MyApp(App):

    def build(self):
        return human()


if __name__ == '__main__':
    MyApp().run()

现在我想要一个条件陈述,检查输入的饥饿程度是否小于5。如果是这样,它将打印"正常"否则它将打印"异常"。

我该怎么办?

2 个答案:

答案 0 :(得分:2)

你显然无法立即检查饥饿程度,在build()方法结束之前,用户可能还没有看到窗口,所以你必须为它组织代码要在一段时间后检查该值,问题是何时,通常,您想要对某些事件做出反应,而不是等待特定的时间。 Kivy提供了两种方法。

您可以决定用户必须通过按下按钮来验证其输入。要做到这一点,你会添加。 self.add_widget(Button(text="ok", on_press=self.check_hunger)

并向check_hunger添加human方法,该方法会检查self.hunger中的当前文本。

但是你可以决定更具反应性,而是对文本输入的任何验证做出反应。要实现此目的,您只需将check_hunger绑定到on_text_validate饥饿事件即可。

添加 self.hunger.bind(on_text_validate=self.hunger) self.hunger = TextInput(multiline=False)之后

或只是编辑此行以阅读 self.hunger = TextInput(multiline=False, on_text_validate=self.check_hunger)

并且仅仅为了这个例子,如果你想在一段确定的时间之后检查饥饿感,你可以在程序的顶部添加: from kivy.clock import Clock 并把 Clock.schedule_once(self.check_hunger, 5) __init__方法的最后。

无论如何,要实现您的要求,check_hunger方法将类似于:

def check_hunger(self, *args): if int(self.hunger.text) < 5: print("normal") else: print("abnormal")

希望它有所帮助!

答案 1 :(得分:1)

在您实例化人类课程后,您只需撰写human_instance.hunger即可获得饥饿程度。

您可以尝试以下代码:

import kivy #import kivy module
kivy.require('1.0.6') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout  
from kivy.uix.textinput import TextInput  

class human(GridLayout):
    #This is a human class
    def __init__(self, **kwargs):
        super(human, self).__init__(**kwargs)
        self.cols = 2 
        self.add_widget(Label(text='Enter your name')) 
        self.name = TextInput(multiline=False) 
        self.add_widget(self.name)
        self.add_widget(Label(text='Enter your hunger level(0-10)'))
        self.hunger = TextInput(multiline=False)
        self.add_widget(self.hunger)

class MyApp(App):

    def build(self):
        return human()


if __name__ == '__main__':
    my_app = MyApp()
    my_app.run()

    my_human = my_app.build()

    if my_human.hunger < 5:
        print('Normal')
    else:
        print('Abnormal')

我不确定此代码是否会运行,因为我不知道kivy的应用程序run方法是阻止还是非阻塞。但是你可以从这段代码中理解逻辑。