2013-09-25 17 views
16

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.

Odpowiedz

20

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ń.

enter image description hereenter image description here

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

+2

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/ –

1

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!"))