如何在kivy python中制作一个不规则的四边形按钮?

Posted

技术标签:

【中文标题】如何在kivy python中制作一个不规则的四边形按钮?【英文标题】:How to make an irregular quadrilateral shaped button in kivy python? 【发布时间】:2021-09-19 16:14:27 【问题描述】:

我正在尝试用 kivy 制作一个 android 应用程序。它的用户界面从名为“2D”和“3D”的这两个按钮开始。请帮我用 kivy 创建一个不规则的四边形按钮。

【问题讨论】:

【参考方案1】:

您可以扩展 Button 使其表现得好像是两个 Buttons

class MyButton(Button):
    my_state = StringProperty('')  # this will be 'b1' or 'b2', even when button is not down
    my_down_image = StringProperty('')
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            rx, ry = self.to_widget(*touch.pos, relative=True)
            if ry > self.height/2.0:  # more complex geometry calculation required
                self.my_down_image = 'B2Down.png'
                self.my_state = 'b2'
            else:
                self.my_down_image = 'B1Down.png'
                self.my_state = 'b1'
        return super(MyButton, self).on_touch_down(touch)

MyButton 类为Button 添加了两个属性,即my_statemy_down_image 属性。 my_state 属性将是 b1b2,具体取决于按下的子按钮(由 on_touch_down() 设置)。 my_down_image 属性设置为B1Down.pngB2Down.png,这描述了我们希望MyButton 在按下B1B2 时的样子。上面代码中的简单 y 坐标比较将不起作用,并且必须更复杂才能正确确定按下了哪个子按钮。 MyButton 可以像这样在kv 中使用:

MyButton:
    background_normal: 'B1andB2.png'
    on_press: app.do_butt_press(self)
    on_release: app.do_butt_release(self)

app 方法如下所示:

def do_butt_press(self, button):
    print('on_butt_press', button.state, button.my_state)

def do_butt_release(self, button):
    print('on_butt_release', button.state, button.my_state)

kv:

<-MyButton>:
    state_image: self.background_normal if self.state == 'normal' else self.my_down_image
    disabled_image: self.background_disabled_normal if self.state == 'normal' else self.background_disabled_down
    canvas:
        Color:
            rgba: self.background_color
        BorderImage:
            border: self.border
            pos: self.pos
            size: self.size
            source: self.disabled_image if self.disabled else self.state_image
        Color:
            rgba: 1, 1, 1, 1
        Rectangle:
            texture: self.texture
            size: self.texture_size
            pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.)

上述kv 规则大部分只是Kivy 使用的默认Button 规则的副本。唯一的变化是在state_image 定义中使用了my_down_image

对于本例,B1andB2.png 可以是:

B1Down.png:

B2Down.png:

【讨论】:

非常感谢兄弟。它对我有用。

以上是关于如何在kivy python中制作一个不规则的四边形按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作kivy文件的单独模块并与python文件集成

如何在kivy中制作圆形进度条?

如何在 python 中获取用户输入(Kivy 框架)

如何使用 KV 语言在 Kivy 中制作自定义按钮?

如何在 Kivy、Python 中更新标签的文本

如何在 Kivy 中从 python 代码更改屏幕