2017-04-08 37 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