Seite 1 von 1

[KIVY] on_release - Behavior geht verloren

Verfasst: Montag 22. Februar 2021, 08:11
von D-Fragment
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

Re: [KIVY] on_release - Behavior geht verloren

Verfasst: Montag 22. Februar 2021, 08:23
von D-Fragment
...auch wenn ich nur "<AnswerButton>" im .KV file schreibe und über python die class definiere...

Re: [KIVY] on_release - Behavior geht verloren

Verfasst: Montag 22. Februar 2021, 09:15
von Dennis89
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

Re: [KIVY] on_release - Behavior geht verloren

Verfasst: Montag 22. Februar 2021, 09:44
von D-Fragment
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

Re: [KIVY] on_release - Behavior geht verloren

Verfasst: Montag 22. Februar 2021, 21:37
von D-Fragment
[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

Re: [KIVY] on_release - Behavior geht verloren

Verfasst: Montag 22. Februar 2021, 21:54
von __deets__
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