Kivy——图像作为按钮

Posted

技术标签:

【中文标题】Kivy——图像作为按钮【英文标题】:Kivy-- Image as Button 【发布时间】:2016-02-03 00:23:57 【问题描述】:

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

【讨论】:

我不明白如何使用它来触发任意函数,但文档的这一页 (kivy.org/doc/stable/api-kivy.uix.behaviors.html) 确实说明了这一点。您只需添加一个类ImageButton(ButtonBehavior, Image): pass。然后你可以使用ImageButton(source="PATH/TO/IMAGE", on_press=some_function()) 让图片充当一个Button。

以上是关于Kivy——图像作为按钮的主要内容,如果未能解决你的问题,请参考以下文章

在kivy中单击时如何更改按钮的背景图像?

Kivy 按钮背景图像大小

kivy按钮图像显示问题

kivy:如何使图像像按钮一样

带有 Kivy 图像的动态按钮

在kivy中的按钮内组合图像和文本