Округление углов кнопки в киви

Каков предпочтительный способ создания закругленных углов для кнопок в киви?

Существуют ли другие одинаково жизнеспособные способы выполнения этой задачи? Спасибо.

Ответы

Ответ 1

Это сложно. Насколько я обеспокоен Widgets всегда прямоугольники. Но мы можем изменить фон и поместить пару изображений для нормального и нижнего состояний, используя свойства background_normal и background_down соответственно. Также вам нужно понять свойство border.

С этими двумя изображениями, называемыми normal.png и down.png, вы можете начать добавлять свои круглые границы.

enter image description hereenter image description here

Вот фрагмент кода, который очень прямолинейный (я пытаюсь объяснить 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()

То, как я это понимаю (и, может быть, я ошибаюсь), это. Значения в border: 30,30,30,30 показывают, сколько пикселей в верхней, правой, нижней и левой частях будет использоваться для границы кнопки фона. Остальное будет заполнено средней частью. Я не уверен здесь. Кстати, если вы хотите увидеть что-то классное, см., Например, border: 150,150,150,150. Причина в том, что мы поднимаем границу, большую, чем фактическое изображение.

Оговорка: Виджеты по-прежнему являются прямоугольниками. Это означает, что даже если вы нажмете на закругленные углы, кнопка все равно получит событие. Я думаю, это справедливая цена. Если вы хотите сделать что-то лучше, возможно, я могу вам помочь, но нам нужно будет использовать некоторые математики, чтобы столкнуться с очками. Один из трюков с Pong Game tutorial в документации состоит в том, что на самом деле мяч является квадратом. Я разместил связанный с ним вопрос здесь, но вам нужно будет использовать Canvas

Ответ 2

Если вы ищете только хорошую внешность и не придирчивы к углам, хотя и округлены, по-прежнему остаются точками касания, вы можете сделать это просто, как показано в этой примерной программе (у этого есть большой радиус для этого образца)

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

kv="""
<[email protected]>:
    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!"))