使用链接列表的简单音乐播放器

问题描述 投票:0回答:1

我正在使用循环链表和Python(pygame)制作音乐播放器。我有删除功能,但显然它总是有问题。 被窃听的条件是:

  1. 我们删除了第一首歌曲,列表中仍然有另一首歌曲
  2. 插入所有歌曲后我们立即删除

此音乐播放器使用我们电脑目录中的 mp3 文件

def delete_current_song(self, playlist_box):
        if not self.head:
            return

        current_song = self.get_current_song()

        if self.head.next == self.head:
            self.stop_current_song()
            self.head = None
            self.current = None
        else:
            self.stop_current_song()
            temp = self.head

            while temp.next != self.current:
                temp = temp.next

            temp.next = self.current.next
            self.current = temp.next

        self.master.after(10, self.update_playlist_box, playlist_box)

        self.master.after(20, self.play_next_song)

        if current_song:
            self.master.after(30, self.play_current_song)

这里我把它放在循环链表类中:

def delete_song(self):
    self.playlist.delete_current_song(self.playlist_box)
    self.update_song_info_label()

还有音乐播放器类中的这个。

那么我该如何修复删除功能以免被窃听呢?

python list linked-list
1个回答
0
投票

delete_current_song
中,在
else
块中,您必须确保在恰好是当前要删除的歌曲时更新
self.head
。否则
self.head
仍将引用已删除的歌曲。

所以改变这个:

            temp.next = self.current.next
            self.current = temp.next

对此:

            temp.next = self.current.next
            if self.head == self.current:
                self.head = temp.next
            self.current = temp.next
© www.soinside.com 2019 - 2024. All rights reserved.