2017-12-10 30 views
2

이것은 실제 프로그램에서 단순화 된 버튼 1 또는 2를 누를 때 "Hello"또는 "Good-bye"를 표시하는 샘플 프로그램입니다.
버튼 1을 누르지 않고 btn1() 함수를 실행하고 프로그램이 시작될 때 "Hello"를 표시합니다.
어떤 코드 행을 추가해야합니까?
인사말에 "Greetings(). btn1()"을 넣을 때 오류 : "인사말이 정의되지 않았습니다."라는 오류가 발생했습니다. 그런 다음 greetingApp 클래스에서 def 빌드 (자체) 이후에 동일한 명령을 입력했지만 아무 일도 없었습니다. main.py에서 python : 클래스 내에서 함수 호출

,
from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 

class Greetings(BoxLayout): 
    greeting=StringProperty() 

    def btn1(self): 
     self.greeting='Hello.' 

    def btn2(self): 
     self.greeting='Good-bye.' 

class GreetingApp(App): 
    def build(self): 
     return Greetings() 

GreetingApp().run() 

그리고 greeting.kv에서

,

#: import main main 

Greetings: 
<Greetings>: 

    orientation: "vertical" 
    Label: 
     text: root.greeting 
    BoxLayout: 
     orientation: "horizontal" 
     Button: 
      text: '1' 
      on_press: root.btn1() 
     Button: 
      text: '2' 
      on_press: root.btn2() 

답변

0

그냥 루트 위젯을 반환하기 전에 btn1 전화는 :

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.lang import Builder 


Builder.load_string(''' 
<Greetings>: 
    orientation: "vertical" 

    Label: 
     text: root.greeting 
    BoxLayout: 
     orientation: "horizontal" 

     Button: 
      text: '1' 
      on_press: root.btn1() 
     Button: 
      text: '2' 
      on_press: root.btn2() 
''') 


class Greetings(BoxLayout): 
    greeting = StringProperty() 

    def btn1(self): 
     self.greeting = 'Hello.' 

    def btn2(self): 
     self.greeting = 'Good-bye.' 

class GreetingApp(App): 
    def build(self): 
     root = Greetings() 
     root.btn1() 

     return root 

GreetingApp().run() 
+0

코드를 제공해 주셔서 감사합니다. 그것은 작동합니다! – user9037109

+0

반갑습니다. – Fogapod

0

__init__ 방법은 때마다 실행 클래스의 인스턴스를 만듭니다.
개체의 생성 시간에 수행하고자하는 작업이 있으니 __init__에 넣을 수 있습니다. 개체를 시작합니다.
Greetings 수업에 추가하십시오.

def __init__(self, **kwargs): 
    super(Greetings, self).__init__(**kwargs) 
    self.btn1() 

그런 다음 개체를 만들 때 호출합니다.

+0

코드가 제대로 작동합니다. 감사. 그것이 무엇을하는지 이해하려고 노력할 것입니다. – user9037109

+0

@ user9037109에 대한 설명이 조금 더 업데이트되었습니다. 더 많은 설명이 필요하면 말해줘. – EL3PHANTEN

+0

추가 설명해 주셔서 감사합니다. 나는 왜 첫 번째 주장 (인사말)이 필요한지 궁금했다. 그들은 명백한 것이 암묵적인 것보다 낫다고 말합니다. – user9037109