如何使用 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 中制作自定义按钮?的主要内容,如果未能解决你的问题,请参考以下文章

在 Kivy 中,我如何从另一个以 kv 语言显示的另一个屏幕获取变量

在 KV 语言中使用 Kivy Garden Graph

如何在 kv 语言中动态制作很多按钮?

在 Kivy 中传递自定义小部件属性

如何在kivy中正确导入自定义小部件

在 Kivy.kv 文件中,我如何引用另一个类中的方法