如何使用 KV 语言在 Kivy 中制作自定义按钮?
Posted
技术标签:
【中文标题】如何使用 KV 语言在 Kivy 中制作自定义按钮?【英文标题】:How to make custom buttons in Kivy with the KV Language? 【发布时间】:2019-01-21 04:36:49 【问题描述】:我正在尝试使用自定义精灵来制作自定义按钮。我知道如何在 KV 语言中做到这一点,但我宁愿坚持使用 Python。
我看到为精灵设置一些源属性在 KV 语言中工作,所以我尝试了这个:
from kivy.app import App
from kivy.uix.button import Button
class RoundButton(Button):
def __init__(self, **kwargs):
Button.__init__(self, **kwargs)
self.source = '/home/shamildacoder/Pictures/Painting.png'
class TestApp(App):
def build(self):
return RoundButton(text='HELLO WORLD')
TestApp().run()
但这只是显示一个普通按钮。有什么帮助吗?
【问题讨论】:
来源是什么?你想让它成为图片的背景吗? 你可以发布 .kv 来翻译成 .py 不,我不想让精灵成为按钮本身。就像认为有一个 16x16 的卡通树图像。当我按下它时,它就像一个按钮并调用绑定到它的函数。我想要一个没有 KV 的 Python 答案 -> PY 翻译 是您的代码建议您基于 .kv 代码,因为 source 是 Image 的属性而不是 Button 的属性,我建议进行翻译,以便您了解对应关系并可以使用其他代码,因为视图是在 .kv 中创建的 【参考方案1】:据我了解,您需要一个Image
,您可以在其中处理on_press
事件,因为它是Behaviors
,如下所示:
from kivy.app import App
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image
class ImageButton(ButtonBehavior, Image):
pass
class MyApp(App):
def build(self):
return ImageButton(source="kivy.png", on_press=lambda *args: print("press"))
if __name__ == "__main__":
MyApp().run()
【讨论】:
TypeError: __init__ takes no parameters
@shamilpython 您是只使用我的代码还是将其改编为其他代码?
@shamilpython 我没有调用构造函数,因为没有必要因为这个原因我使用pass
。
糟糕,抱歉,忘记删除 text = 'Hello'
,已修复。非常感谢!以上是关于如何使用 KV 语言在 Kivy 中制作自定义按钮?的主要内容,如果未能解决你的问题,请参考以下文章