2013-09-25 15 views

risposta

20

Questo è difficile. Per quanto mi riguarda, Widgets sono sempre rettangoli. Ma possiamo cambiare lo sfondo e inserire un paio di immagini per gli stati normale e basso usando rispettivamente le proprietà background_normal e background_down. Inoltre è necessario comprendere la proprietà border.

Con queste due immagini chiamate normal.png e down.png, è possibile iniziare ad aggiungere i bordi arrotondati.

enter image description hereenter image description here

Ecco il pezzo di codice, che è molto semplice (cerco di spiegare la proprietà border sottostante):

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() 

Il modo in cui ho capito questo (e potrei essere sbagliato) è questo. I valori in border: 30,30,30,30 indicano quanti pixel in alto, a destra, in basso ea sinistra verranno utilizzati per il bordo del pulsante dello sfondo. Il resto sarà riempito con la parte centrale. Non sono sicuro qui. A proposito, se vuoi vedere qualcosa di bello, vedi ad esempio border: 150,150,150,150. Il motivo è che stiamo rilevando un bordo più grande dell'immagine reale.

L'avvertenza: I widget sono ancora rettangoli. Ciò significa che anche se fai clic sugli angoli arrotondati, il pulsante continua a ricevere l'evento. Immagino sia un prezzo equo. Se vuoi fare qualcosa di meglio, forse posso aiutarti, ma dovremo usare un po 'di matematica per scontrare i punti. Uno dei trucchi con il Pong Game tutorial nella documentazione è che in realtà la palla è un quadrato. Ho inviato una domanda correlata here, ma sarà necessario utilizzare il Canvas

+2

per collisione abitudine là è un esempio a https://github.com/kivy/kivy/blob/master/examples/widgets /customcollide.py. I pulsanti utilizzano Immagine bordo per visualizzare le immagini con una proprietà di bordo. Questa immagine di bordo è abbastanza simile in funzionalità a CSS BorderImage. Potresti ottenere una buona idea da qui http://css-tricks.com/understanding-border-image/ –

1

Se stai cercando solo l'aspetto positivo e non sono schizzinosi negli angoli, anche se arrotondati, sono ancora punti di contatto, puoi farlo semplicemente , come mostrato in questo programma di esempio (questo ha ampio raggio per questo campione):

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