2016-11-04 3 views
1

나는 kivy를 처음 사용합니다. 나는 python과 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 개 미만인지 여부를 확인하는 조건문을하고 싶습니다. 그렇다면 "정상"이 인쇄되고 그렇지 않으면 "비정상"이 인쇄됩니다.

어떻게해야합니까?

+1

당신은 확실히 파이썬 튜토리얼을 살펴보아야합니다. 진술과 수업이 기본 어딘가에 설명되어있는 경우. Kivy는 캐주얼 (C) Python에서 사용할 수있는 패키지 일뿐 아니라 다른 구문을 필요로하는 특수한 Python 인터프리터는 아닙니다. – KeyWeeUsr

+0

'__init__'에서 사용자 입력을 요구해서는 안됩니다. 입력 값을 검사하도록 정의 된 메서드가있는 사용자 정의 TextInput 클래스를 만들고 if else 문을 사용하여 원하는 것을 인쇄하십시오. 일단 당신이 그것을 인스턴스화했다면, 사용자는 마음의 욕구에 들어갈 수 있고 on_text_validate로 당신의 메소드를 트리거 할 수 있습니다. – Daniel

답변

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 방법은 차단 또는 비 차단하면 내가 모르겠어요 때문이다. 하지만이 코드의 논리를 이해할 수 있습니다.

+0

'run()'이후의 것은 앱이 죽은 후에 만 ​​실행됩니다. 그것을 build() 또는 다른 코드 구조에 넣으십시오. 또한'hunger'는 위젯이며 동작은 ->''<5' 인 경우 올바르게 작동하지 않는다는 것을 알아 두십시오. 위젯의'text' 속성에 액세스해야하며 문자열입니다. ' "5"<5', 등등. – KeyWeeUsr

+0

나는'build()'내에 코드를 넣었다. 그러나 아무것도 바뀌지 않았습니다. 화면에 아무 것도 인쇄되지 않습니다. 프로그램의 끝까지 – tatan

+0

run()이 (가) 차단되어 있으므로 작동하지 않습니다. – Tshirtman

2

분명히 굶주림 수준을 즉시 확인할 수는 없습니다. build() 메소드가 끝나기 전에 사용자가 아직 창을 보지 못했을 것입니다. 따라서 코드를 구성하여 확인해야합니다. 값이 얼마 남지 않았 으면 일 때 일 때 대개 일정한 시간을 기다리기보다는 어떤 이벤트에 반응해야합니다. Kivy는 그 중 하나를 수행 할 수있는 방법을 제공합니다.

사용자가 버튼을 눌러 입력 내용의 유효성을 검사해야한다고 결정할 수 있습니다. 그렇게하려면 추가 할 것입니다. self.add_widget(Button(text="ok", on_press=self.check_hunger)

humancheck_hunger 메서드를 추가하면 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 을 입력하고 __init__ 메소드 끝에 Clock.schedule_once(self.check_hunger, 5) 을 입력하십시오.

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

그것이 도움이되기를 바랍니다 :

어쨌든, 당신의 check_hunger 방법은 같을 것을 요구 것을 달성하기 위해!

+0

시험해보고 효과가 있는지 알려주세요. – tatan

+0

작동 했습니까? :) – Tshirtman

관련 문제