2017-04-08 34 views
0

继访问属性是main.py:如何千伏从python脚本中kivy

from kivy.app import App 
from kivy.uix.behaviors import ButtonBehavior 
from kivy.uix.image import Image 
from kivy.uix.screenmanager import (ScreenManager, Screen) 
from kivy.uix.button import Button 
from kivy.properties import * 

class EmotionsScreen(Screen): 
    def button_press(self, emotion_str): 
     print (self.ids[emotion_str].emotion) 

class ScreenManagement(ScreenManager): 
    pass 

class HappyButton(ButtonBehavior, Image): 
    def on_press(self): 
     print(self.emotion) 

class SadButton(ButtonBehavior, Image): 
    def on_press(self): 
     print(self.emotion) 

class TiredButton(ButtonBehavior, Image): 
    def on_press(self): 
     print(self.emotion) 

class MyApp(App): 
    def build(self): 
     sm = ScreenManagement() 
     sm.current = 'Emotions' 
     return sm 

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

以下是myapp.kv文件的内容: : EmotionsScreen:

<EmotionsScreen>: 
    name:'Emotions' 

    HappyButton: 
     id: happy 
     source: "happy.png" 
     pos: (-200, 100) 
     emotion: "Happy" 
    SadButton: 
     id: sad 
     source: "sad.png" 
     pos: (0, 100) 
     emotion: "Sad" 
    TiredButton: 
     id: tired 
     source: "tired.png" 
     pos: (200, 100) 
     emotion: "Tired" 

在运行应用程序并单击这三个按钮时,我得到以下行为:

  • 点击快乐按钮打印“悲伤” :)
  • 点击按钮伤心打印“累”
  • 点击按钮累打印“累”

上述情况发生,即使我把一个回调(内的应用程序,以提供的参数),如下所示:

main.py:

from kivy.app import App 
from kivy.uix.behaviors import ButtonBehavior 
from kivy.uix.image import Image 
from kivy.uix.screenmanager import (ScreenManager, Screen) 
from kivy.uix.button import Button 
from kivy.properties import * 

class EmotionsScreen(Screen): 
    pass 

class ScreenManagement(ScreenManager): 
    pass 

class ImageButton(ButtonBehavior, Image): 
    pass 

class MyApp(App): 
    def build(self): 
     sm = ScreenManagement() 
     sm.current = 'Emotions' 
     return sm 

    def button_press(self, *args): 
     print (args) 


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

myapp.kv:

<ScreenManagement>: 
    EmotionsScreen: 

<EmotionsScreen>: 
    name:'Emotions' 

    ImageButton: 
     source: "happy.png" 
     pos: (-200, 100) 
     on_press: app.button_press("Happy") 
    ImageButton: 
     source: "sad.png" 
     pos: (0, 100) 
     on_press: app.button_press("Sad") 
    ImageButton: 
     source: "tired.png" 
     pos: (200, 100) 
     on_press: app.button_press("Tired") 

我希望它分别点击三个按钮后打印出“快乐”,“悲伤”和“疲倦”。我可以知道我哪里出了问题吗?

回答

1

这些图像似乎是随机放置的。使用实例按钮为原型:

from kivy.app import App 
from kivy.uix.image import Image 
from kivy.uix.screenmanager import (ScreenManager, Screen) 
from kivy.uix.button import Button 
from kivy.properties import * 
from kivy.lang import Builder 

Builder.load_string(''' 
<EmotionsScreen>: 
    name:'Emotions' 
    HappyButton: 
     id: happy 
     pos: (-200, 100) 
     text: "Happy" 
     emotion: "Happy" 
    SadButton: 
     id: sad 
     pos: (0, 100) 
     text: "Sad" 
     emotion: "Sad" 
    TiredButton: 
     id: tired 
     pos: (200, 100) 
     text: "Tired" 
     emotion: "Tired" 
''') 

class EmotionsScreen(Screen): 
    def button_press(self, emotion_str): 
     print (self.ids[emotion_str].emotion) 

class ScreenManagement(ScreenManager): 
    pass 

class HappyButton(Button): 
    def on_press(self): 
     print(self.emotion) 

class SadButton(Button): 
    def on_press(self): 
     print(self.emotion) 

class TiredButton(Button): 
    def on_press(self): 
     print(self.emotion) 

class MyApp(App): 
    def build(self): 
     sm = ScreenManagement() 
     sm.add_widget(EmotionsScreen()) 
     sm.current = 'Emotions' 
     return sm 

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

你还是把布局屏幕内管理其部件:

Builder.load_string(''' 
<EmotionsScreen>: 
    name:'Emotions' 

    BoxLayout: 
     HappyButton: 
      id: happy 
      text: "Happy" 
      emotion: "Happy" 
     SadButton: 
      id: sad 
      text: "Sad" 
      emotion: "Sad" 
     TiredButton: 
      id: tired 
      text: "Tired" 
      emotion: "Tired" 
''') 
+0

非常感谢。有效!我有不到15分,所以我不能投你的答案 – user3308983