2017-07-18 1 views
1

Ich versuche, eine benutzerdefinierte Schaltfläche zu erstellen, die Farben ändern wird, wenn sie gedrückt wird (tatsächlich den Farbton auf einem Bild ändern), und ich kann die on_press nicht sogar richtig funktionieren. Die App läuft, aber die Taste gibt die Fehlermeldung: "Attribut Fehler: 'Image' Objekt hat kein Attribut 'change_color'"Wie komme ich an on_press, um in benutzerdefinierten Schaltflächen zu arbeiten?

Die Python-Datei:

import kivy 
kivy.require("1.10.0") 
from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.image import Image 
from kivy.lang.builder import Builder 

class Container(BoxLayout): 
    pass 

class ImageButton(): 
    def change_color(self): 
     print("Success!") 

class TestName(App): 
    def build(self): 
     return tester 

tester = Builder.load_file("test.kv") 

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

Die Kivy Datei:

Container: 

<Container>: 
    BoxLayout: 
     ImageButton: 
      source: "emptybox.png" 


<[email protected]>: 
    source: None 
    on_press: root.change_color() 

    Image: 
     source: root.source 
     pos: root.pos 
     size: root.size 
+0

Möchten Sie die Hintergrund- oder Textfarbe von ImageButton ändern? – FJSevilla

+0

Ich werde eine transparente Leinwand über die Schaltfläche erstellen, wenn sie gedrückt wird, wodurch sie dunkler aussieht. –

+0

Ich habe gerade eine Antwort erstellt, in diesem Fall ändere ich den Hintergrund mit einem transparenten Bild. Wenn Sie jedoch ein Problem haben, kommentieren Sie bitte und ich werde die Antwort bearbeiten. – FJSevilla

Antwort

1

ich sehe zwei Probleme im Code:

  • Zuerst build metho d gibt tester (die Ausgabe von Builder.load_file) zurück.

  • Auf der anderen Seite sollte Ihre ImageButton Klasse in .py-Datei von kivy.uix.button.Button erben.

Ich weiß nicht, was "Farbe" Sie ändern möchten, überlasse ich Ihnen ein Beispiel, wo Sie Hintergrundfarbe ändern, wenn sie gedrückt:

import kivy 
kivy.require("1.10.0") 

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang.builder import Builder 
from random import random 


kv_text = ''' 
<Container>: 
    BoxLayout: 
     ImageButton: 
      source: "emptybox.png" 


<[email protected]>: 
    source: None 
    on_press: self.change_color() 

    Image: 
     source: root.source 
     pos: root.pos 
     size: root.size 

''' 


class Container(BoxLayout): 
    pass 

class ImageButton(Button): 
    def change_color(self): 
     self.background_color = (random(), random(), random(), 1) 

class TestName(App): 
    def build(self): 
     Builder.load_string(kv_text) 
     return Container() 

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

Ausgang:

enter image description here

+0

Ich wusste, dass ich etwas Einfaches verpasst habe, ich habe vergessen, von Button zu erben! Ich danke dir sehr! Und ich liebe dein Beispiel. :) –

Verwandte Themen