Ошибка атрибута: ‘kivy.properties.Объект ObjectProperty’ не имеет атрибута ‘background_normal’

#python #kivy

#питон #киви

Вопрос:

Я делаю mp3-плеер в kivy, и я столкнулся с проблемой. я искал решение, но ни одно из них не работает для меня. Я получаю эту ошибку AttributeError: 'kivy.properties.ObjectProperty' object has no attribute 'background_normal' , и я не могу ее устранить. пожалуйста, помогите мне.

Мой код на python

 class PlaySongScreen(Screen):
    play_btn = ObjectProperty(None)
    def play(self, song_path):
        #function to play the desired song
        if song_path == 'None':
            song_path = songs_list[0]['text']
        mypath = song_path
        mypath = mypath.replace('\', '\\')
        if pg.mixer.music.get_busy() == 0:
            #playing the song
            pg.mixer.music.load(mypath)
            pg.mixer.music.play() 

            #change the play button to pause button
            self.play_btn.background_normal = 'images\new_pause.jpg' 
            self.play_btn.background_down = 'images\pause.jpg'

play_function = PlaySongScreen.play

class PlayButton(Factory.Button):
    def on_press(self):
        play_function(PlaySongScreen, song_path=self.text)
 

Мой код .kv

 <PlaySongScreen>:
    play_btn: play_pause
    GridLayout:
        cols: 1
        padding: 5
        RelativeLayout:
            Button:
                id: play_pause
                on_press: root.play('None')
                background_normal: 'images\new_play.jpg'
                background_down: 'images\play.jpg'
                size_hint: 0.8, 0.9
                pos_hint: {'center_x': 0.5, 'center_y': 0.5}
 

ошибка, которую я получаю

 File "c:/Users/user/Desktop/Coding/python/Projects/Music Player/music_player.py", line 126, in on_press
 play_function(PlaySongScreen, song_path=self.text)
 File "c:/Users/user/Desktop/Coding/python/Projects/Music Player/music_player.py", line 40, in play
 self.play_btn.background_normal = 'images\new_pause.jpg'
 AttributeError: 'kivy.properties.ObjectProperty' object has no attribute 'background_normal'
 

Пожалуйста, помогите мне устранить эту ошибку.

Ответ №1:

Не удается воспроизвести вашу ошибку с помощью опубликованного вами кода. Но я подозреваю, что в вашем фактическом коде, который вы используете PlayButton , который вызывает PlaySongScreen.play . Если это то, что вы на самом деле делаете, то это причина вашей проблемы. Если вы получаете доступ PlaySongScreen.play , вы получаете доступ к ObjectProperty , а не к Button с идентификатором play_pause . Вы должны получить доступ к play_btn атрибуту через экземпляр PlaySongScreen , а не сам класс.

То, как ваш опубликованный код делает это правильно. Использование a Button с on_press установленным значением root.play . Это root экземпляр PlaySongScreen .

Комментарии:

1. Да, это была проблема, и извините за неудобства из-за моего кода. И спасибо, ваше решение сработало.