Kivy——图像作为按钮

Kivy——图像作为按钮,kivy,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("""

我只是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()  
从kivy.uix.behaviors导入按钮行为
从kivy.uix.image导入图像
从kivy.lang导入生成器
从kivy.app导入应用程序
从kivy.uix.floatlayout导入floatlayout
生成器。加载\u字符串(“”)
:  
浮动布局:
图片:
来源:'resizedA.png'
大小提示:.2、.2
""")  
类ImageButton(按钮行为、浮动布局、图像):
def on_按下(自):
打印('按下')
为分配应用程序(应用程序)分类:
def生成(自):
返回图像按钮()
如果名称=“\uuuuu main\uuuuuuuu”:
_AssignmentApp().run()
我的问题是,为什么即使我按下屏幕的其他部分(而不是图像),应用程序仍然将整个屏幕视为一个按钮

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

class ImageButton(ButtonBehavior,FloatLayout, Image):  
不要继承多个小部件(在本例中是FloatLayout和Image),这将导致一些奇怪的bug

至于您的具体问题,ButtonBehavior是ImageButton的父类,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()  
从kivy.uix.behaviors导入按钮行为
从kivy.uix.image导入图像
从kivy.lang导入生成器
从kivy.app导入应用程序
从kivy.uix.floatlayout导入floatlayout
类RootWidget(FloatLayout):
通过
类ImageButton(按钮行为,图像):
def on_按下(自):
打印('按下')
生成器。加载\u字符串(“”)
:  
图像按钮:
来源:'resizedA.png'
大小提示:.2、.2
""")  
为分配应用程序(应用程序)分类:
def生成(自):
返回RootWidget()
如果名称=“\uuuuu main\uuuuuuuu”:
_AssignmentApp().run()

我不明白如何使用它来启动任意函数,但文档()的这一页确实说明了这一点。您只需添加一个类
ImageButton(ButtonBehavior,Image):pass
。然后,您可以使用
ImageButton(source=“PATH/TO/IMAGE”,on\u press=some\u function())
让图像充当按钮。