我是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。如果是这样,它将打印"正常"否则它将打印"异常"。
我该怎么办?
答案 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
方法是阻止还是非阻塞。但是你可以从这段代码中理解逻辑。