[KIVY] on_release - Behavior geht verloren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
D-Fragment
User
Beiträge: 6
Registriert: Sonntag 7. Februar 2021, 23:01

hallo, habe momentan das problem, dass der on_release event meines custom buttons nicht mehr ausgelöst wird, sobald ich die class in python lade. ist die class ausschliesslich im .kv file definiert funktioniert sie wieder.



KV:

Code: Alles auswählen

#---------------------------------------
<AnswerButton@ButtonBehavior+Widget>:
#---------------------------------------

    size_hint:          None,None
    height:             dp(25)

    width:              lbl_txt.texture_size[0] + lbl_ic.texture_size[0] + box.spacing * 3

    markup:             False
    icon_letter:        None

    font_size:          14

    text:               ''
    color:              [0,0,0,0] # main Button Color avoid double button text (lbl_txt)

    text_color:         [1,1,1,1]
    bg_color:           None
    truth:              False


    BoxLayout:

        pos:            root.pos
        size:           root.size
        id:             box
        spacing:        dp(10)

    #------------
        MDIcon:
    #------------

            id:             lbl_ic
            icon:           "alpha-"+root.icon_letter.lower()+"-circle-outline" if root.icon_letter else "adjust"

            size_hint_x:    None
            width:          self.texture_size[0]
            opposite_colors:True

    #-------------
        Label:
    #-------------

            id:             lbl_txt

            size_hint_x:    None
            width:          self.texture_size[0]

            text:           root.text           #ref
            font_size:      sp(root.font_size)  #ref

            shorten:        True

            color:          root.text_color if root.text_color else [1,1,1,1]

            markup:         root.markup         #ref
            
            
PYTHON: (sobald diese 2 zeilen code dazukommen verliert der button seinen event)

Code: Alles auswählen


class AnswerButton(Widget,ButtonBehavior):
    pass



gruss
christian
D-Fragment
User
Beiträge: 6
Registriert: Sonntag 7. Februar 2021, 23:01

...auch wenn ich nur "<AnswerButton>" im .KV file schreibe und über python die class definiere...
Benutzeravatar
Dennis89
User
Beiträge: 1555
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ich weis nicht ob ich dich richtig verstehe, aber du musst in deiner *.kv-Datei mit 'on_release' oder 'on_press' angeben, was beim Betätigen oder Loslassen des Buttons passieren soll. Ich habe im folgenden Link mal meinen aktuellen Stand eines kivy-Projekts veröffentlicht, vielleicht hilft dir das weiter:
https://forum-raspberrypi.de/forum/thre ... hgeraeten/

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
D-Fragment
User
Beiträge: 6
Registriert: Sonntag 7. Februar 2021, 23:01

hey danke für die antwort. also der gepostete kv-code ist ja nur die klasse selbst (<Answerbutton>)die ich definiere.
das "on_release" oder "on_press" event wird ja dann im kv-file mit zb:

Answerbutton:
text:''blabbla'
on_release: print('blabla')

definiert. sonst würde ja, wenn ich den event in der klasse selbst einbinde und den answerbutton 10x im UI verteile immer der selbe event für jeden button abgefeuert.

mein problem ist dass , z.b das "print('blabla')" nicht feuert sobald ich die klasse in python definiere (mit ButtonBehavior).im kv-code allein funktioniert das wunderbar.

hoffe jetzt ist es besser verstädlich was ich meine

gruss
christian
D-Fragment
User
Beiträge: 6
Registriert: Sonntag 7. Februar 2021, 23:01

[GELÖST]

nach einer weiteren runde des herumprobierens hab ich die lösung nun gefunden:

Code: Alles auswählen

class AnswerButton(ButtonBehavior,Widget):
    pass
wichtig ist offenbar die reihenfolge des erbens in dieser klasse. ERST die behavior DANN das widget, weches diese eigenschaften erben soll.
wieder was gelernt...

evtl hilft das dem ein oder anderen verzweifelten kivy-coder

schönen abend
christian
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gut das du das gefunden hast. Zur Ehrenrettung von Kivy muss man sagen: sie weisen darauf ganz klar hin: https://kivy.org/doc/stable/api-kivy.ui ... .behaviors
Antworten