2013-11-24 21 views
9

Ich bin neu in Kivy und habe Probleme beim Festlegen der Hintergrundfarbe eines Buttons. Hier ist mein einfaches Beispiel:Ändern der Hintergrundfarbe eines Buttons in Kivy

# custombutton.py 

from kivy.app import App 
from kivy.uix.widget import Widget 


class MyWidget(Widget): 
    pass 


class CustomButtonApp(App): 
    def build(self): 
     return MyWidget() 


if __name__ == '__main__': 
    CustomButtonApp().run() 

und die begleitende kv Datei custombutton.kv:

#:kivy 1.7.2 

<MyWidget>: 
    canvas: 
     Color: 
      rgb: (0.93, 0.93, 0.93) 
     Rectangle: 
      pos: self.pos 
      size: self.size 

    Button: 
     center: self.parent.center 
     font_size: 14 
     height: 28 
     background_color: (1.0, 0.0, 0.0, 1.0) 
     text: "I'm a Button" 

Ich bin sicher, ich bin etwas fehlt offensichtlich, aber ich habe über eine Stunde lang mit diesem worden Messing jetzt und nirgendwo hinkommen. Der Knopf scheint einen Hauch von sehr dunkel rot gefärbt zu erhalten:

enter image description here

Ist dies nicht der Weg, um die Hintergrundfarbe für eine Schaltfläche in Kivy angeben?

Danke!

Antwort

13

Ah, das ist eine häufige Verwirrung. Das Problem ist, dass Button.background_color wirklich funktioniert als eine Art Farbton, nicht nur eine Blockfarbe. Da der Standardhintergrund ein graues Bild ist (das Bild, das Sie normalerweise sehen, wenn Sie einen nicht gedrehten Knopf machen), sehen Sie einen roten Farbton für das graue Bild - das als dunkles Rot erscheint.

Sie können das gewünschte Verhalten erhalten, indem Sie das Hintergrundbild durch einfaches Weiß ersetzen (es müssen nicht mehr als ein paar Pixel sein) oder auf andere Weise mit den Eigenschaften background_normal und background_down spielen. Wenn Ihre Hintergrundfarbe das neue, reinweiße Bild tönt, erhalten Sie das reine Rot, nach dem Sie suchen.

Ich denke, das ist nicht so klar in den Dokumenten, ich werde versuchen, es zu verbessern.

+0

Dank, das funktioniert. Was ist mit der Randfarbe? – Fiver

+0

Ich bin mir nicht ganz sicher, wie das Grenzmaterial in der Praxis funktioniert. Ich habe immer nur meine eigenen einfachen Grenzen mit Vertex-Anweisungen (Linie usw.) direkt auf meiner Widget-Leinwand gezeichnet. – inclement

+0

Sie können den Bildern 'background_normal' und' background_down' Rahmen hinzufügen: http://stackoverflow.com/questions/19005182/rounding-button-corners-in-kivy. Die Bilder sind in einem Raster von 9 ähnlich dem [css border-image] (http://css-tricks.com/understanding-border-image/) aufgeteilt. Sie müssen sicherstellen, dass die Ecken übereinstimmen. –

2

Es ist schon eine Weile her, seit diese zuerst mit Updates sie mit einer besseren Lösung kam so vielleicht gepostet:

Button: 
    background_normal: '' 
    background_color: 1, .3, .4, .85 

Da der Knopf eine Standard-Grau hat, wird Hintergrundfarbe addieren nur die Taste tönen. Durch Setzen von background_normal auf '' wird der Standardwert auf weiß zurückgesetzt. Von der weißen Leinwand funktioniert die background_color wie erwartet.

Dokumentation

1) https://kivy.org/docs/api-kivy.uix.button.html?highlight=button#module-kivy.uix.button

Verwandte Themen