Qual è il modo preferito per creare angoli arrotondati per i pulsanti in kivy?Angoli dei pulsanti di arrotondamento in kivy
Esistono altri modi ugualmente validi per eseguire questa attività? Grazie.
Qual è il modo preferito per creare angoli arrotondati per i pulsanti in kivy?Angoli dei pulsanti di arrotondamento in kivy
Esistono altri modi ugualmente validi per eseguire questa attività? Grazie.
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.
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
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!"))
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/ –