在kivy的圆角按钮角落

Jam*_*s_L 17 kivy

在kivy中为按钮创建圆角的首选方法是什么?

还有其他同样可行的方法来执行此任务吗?谢谢.

tot*_*ico 24

这是一个棘手的问题.据我所关注的Widgets是长方形.但是我们可以分别使用background_normalbackground_down属性来改变背景并为正常状态和向下状态放置几个图像.您还需要了解该border物业.

有了这个两个图像名为normal.pngdown.png,你就可以开始添加你的一轮边界.

在此输入图像描述 在此输入图像描述

这是一段代码,非常直接(我试着解释border下面的属性):

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.lang import Builder

Builder.load_string("""
<Base>:
    Button:
        background_normal: 'normal.png'
        background_down: 'down.png'
        border: 30,30,30,30
""")


class Base(FloatLayout):
    pass

class ButtonsApp(App):
    def build(self):
        return Base()

if __name__ == "__main__":
    ButtonsApp().run()
Run Code Online (Sandbox Code Playgroud)

我理解这一点的方式(我可能错了)就是这样.值in border: 30,30,30,30表示顶部,右侧,底部和左侧的像素将用于背景按钮的边框.剩下的就是中间部分.我不确定.顺便说一句,如果你想看到一些很酷的东西,请参阅border: 150,150,150,150.原因是我们正在拾取比实际图像更大的边界.

警告:小部件仍然是矩形.这意味着即使您单击圆角,该按钮仍会收到该事件.我想这是一个合理的价格.如果你想做更好的事情,也许我可以帮助你,但我们需要用一些数学来碰撞积分.文档中Pong Game教程的一个技巧是实际上球是一个正方形.我在这里发布了一个相关的问题,但你需要使用Canvas

  • 对于自定义冲突,有一个例子在https://github.com/kivy/kivy/blob/master/examples/widgets/customcollide.py.按钮使用边框图像显示具有边框属性的图像.此Border图像在功能上与CSS BorderImage非常相似.你可以从这里得到一个好主意http://css-tricks.com/understanding-border-image/ (3认同)

Ruf*_*sVS 6

如果您只是在寻找好看的外观,并且对拐角处的部分虽然变圆,但仍然不挑剔,但仍然可以触摸它们,则可以简单地做到这一点,如本示例程序所示(此示例的半径较大):

from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.base import runTouchApp

kv="""
<RoundedButton@Button>:
    background_color: 0,0,0,0  # the last zero is the critical on, make invisible
    canvas.before:
        Color:
            rgba: (.4,.4,.4,1) if self.state=='normal' else (0,.7,.7,1)  # visual feedback of press
        RoundedRectangle:
            pos: self.pos
            size: self.size
            radius: [50,]
"""
class RoundedButton(Button):
    pass

Builder.load_string(kv)

runTouchApp(RoundedButton(text="Hit Me!"))
Run Code Online (Sandbox Code Playgroud)