Kivy-- 图像作为按钮

Kivy-- Image as Button

我只是 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()  

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

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

class ImageButton(ButtonBehavior,FloatLayout, Image):  

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

至于您的具体问题,ButtonBehavior 是 ImageButton 的父级 class,ImageButton 是根小部件并填充屏幕。出于这个原因,整个屏幕 一个按钮,尽管您显然有其他意图。

下面是不是更像你想要的?您也可以只使用 FloatLayout 而不是创建新的 RootWidget class,我这样做只是为了适应您已经编写的内容。

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()