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——图像作为按钮的主要内容,如果未能解决你的问题,请参考以下文章