Kivy--图像为按钮

时间:2015-11-02 23:52:54

标签: kivy

我只是kivy和面向对象编程的初学者。

我一直在练习这段代码作为这里教程的组合:

from kivy.uix.behaviors import ButtonBehavior  
from kivy.uix.image import Image  
from kivy.lang import Builder  
from kivy.app import App  
from kivy.uix.floatlayout import FloatLayout  

Builder.load_string("""  
<ImageButton>:  
    FloatLayout:  
        Image:  
            source:'resizedA.png'  
            size_hint: .2, .2  
""")  

class ImageButton(ButtonBehavior,FloatLayout, Image):  
    def on_press(self):  
        print ('pressed')


class The_AssignmentApp(App):  
    def build(self):  
        return ImageButton()  

if __name__ == "__main__":  
    The_AssignmentApp().run()  

我的问题是,为什么即使我按下屏幕的其他部分(不是图像),应用程序仍将整个屏幕视为按钮?

请原谅我的无知,我真的很想学习。谢谢!

1 个答案:

答案 0 :(得分:6)

class ImageButton(ButtonBehavior,FloatLayout, Image):  

不要从多个小部件继承(在本例中为FloatLayout和Image),这会导致一些奇怪的错误。

至于你的具体问题,ButtonBehavior是ImageButton的父类,它是根小部件并填充屏幕。出于这个原因,整个屏幕一个按钮,尽管你明确地想要这样做。

以下更符合您的要求吗?您也可以使用FloatLayout而不是创建新的RootWidget类,我只是这样做以适应您已经编写的内容。

from kivy.uix.behaviors import ButtonBehavior  
from kivy.uix.image import Image  
from kivy.lang import Builder  
from kivy.app import App  
from kivy.uix.floatlayout import FloatLayout  

class RootWidget(FloatLayout):
    pass

class ImageButton(ButtonBehavior, Image):  
    def on_press(self):  
        print ('pressed')

Builder.load_string("""  
<RootWidget>:  
    ImageButton:  
        source:'resizedA.png'  
        size_hint: .2, .2  
""")  

class The_AssignmentApp(App):  
    def build(self):  
        return RootWidget()

if __name__ == "__main__":  
    The_AssignmentApp().run()