#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. Да, это была проблема, и извините за неудобства из-за моего кода. И спасибо, ваше решение сработало.