Jaki jest preferowany sposób tworzenia zaokrąglonych narożników dla przycisków w kivy?Narożniki zaokrąglania w kivy
Czy są inne równie opłacalne sposoby wykonania tego zadania? Dziękuję Ci.
Jaki jest preferowany sposób tworzenia zaokrąglonych narożników dla przycisków w kivy?Narożniki zaokrąglania w kivy
Czy są inne równie opłacalne sposoby wykonania tego zadania? Dziękuję Ci.
To jest podchwytliwe. O ile mnie niepokoją to Widgets
są zawsze prostokątami. Ale możemy zmienić tło i umieścić kilka obrazów dla normalnego i dolnego stanu, odpowiednio używając właściwości background_normal
i background_down
. Również musisz zrozumieć właściwość border
.
Te dwa obrazy o nazwach normal.png
i down.png
umożliwiają rozpoczęcie dodawania okrągłych obramowań.
Oto fragment kodu, który jest bardzo proste (staram się wyjaśnić właściwość border
poniżej):
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()
The Way I zrozumieć (i mogę być źle) jest to. Wartości w border: 30,30,30,30
określają, ile pikseli na górze, po prawej, u dołu i po lewej stronie będzie używanych do obramowania przycisku tła. Reszta zostanie wypełniona środkową częścią. Nie jestem tego pewien. Przy okazji: jeśli chcesz zobaczyć coś fajnego, zobacz na przykład border: 150,150,150,150
. Powodem jest to, że odbieramy granicę większą niż rzeczywisty obraz.
Ostrzeżenia: Widżety są nadal prostokątami. Oznacza to, że nawet jeśli klikniesz na zaokrąglone rogi, przycisk nadal odbierze wydarzenie. Myślę, że to uczciwa cena. Jeśli chcesz zrobić coś lepszego, może pomogę ci, ale będziemy musieli użyć matematyki, aby zderzyć punkty. Jedną z sztuczek z Pong Game tutorial w dokumentacji jest to, że faktycznie piłka jest kwadratem. Opublikowaliśmy powiązane pytanie: here, ale musisz użyć modelu Canvas
Jeśli szukasz tylko dobrego wyglądu i nie jesteś wybredny w kwestii narożników, choć zaokrąglony, nadal masz punkty dotykowe, możesz to zrobić po prostu , jak pokazano w poniższym przykładzie programu (to ma duży promień dla tej próbki):
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!"))
na zlecenie kolizji jest przykładem na https://github.com/kivy/kivy/blob/master/examples/widgets /customcollide.py. Przyciski używają obrazu obramowania do wyświetlania obrazów, które mają właściwość border. Ten obrazek Border jest bardzo podobny w funkcjonalności do CSS BorderImage. Możesz uzyskać dobry pomysł tutaj http://css-tricks.com/understanding-border-image/ –