用QMediaplaylist写一个目录只能有四级,且只显示拥有*.mp3的文件以及含有*.mpe的文件夹
时间: 2024-02-01 21:13:15 浏览: 186
以下是一个简单的示例代码,可以实现QMediaPlayer和QMediaPlaylist的目录功能:
```python
import os
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
class MediaPlayer(QWidget):
def __init__(self):
super().__init__()
# 初始化UI界面
self.init_ui()
# 初始化播放器和播放列表
self.media_player = QMediaPlayer(self)
self.playlist = QMediaPlaylist(self.media_player)
self.media_player.setPlaylist(self.playlist)
# 添加音乐文件到播放列表
self.add_music_to_playlist("E:/Music")
def init_ui(self):
# 设置窗口标题和大小
self.setWindowTitle("Media Player")
self.setGeometry(100, 100, 800, 600)
# 创建界面布局
main_layout = QVBoxLayout()
# 创建播放器控件和播放列表控件
self.player_widget = QVideoWidget(self)
self.playlist_view = QListView(self)
self.playlist_view.setModel(self.playlist)
# 将控件添加到布局中
main_layout.addWidget(self.player_widget)
main_layout.addWidget(self.playlist_view)
# 设置布局
self.setLayout(main_layout)
# 连接信号和槽函数
self.playlist.currentIndexChanged.connect(self.media_player.setMedia)
self.media_player.setVideoOutput(self.player_widget)
def add_music_to_playlist(self, dir_path, level=0):
if level >= 4:
return
for file_name in os.listdir(dir_path):
file_path = os.path.join(dir_path, file_name)
if os.path.isdir(file_path):
if not any(file_name.endswith(ext) for ext in (".mp3", ".mpe")):
continue
self.playlist.addMedia(QMediaContent())
self.playlist.media(self.playlist.mediaCount() - 1).setPlaylist(self.playlist)
item = QStandardItem(file_name)
item.setData(file_path, Qt.UserRole)
self.playlist_view.model().appendRow(item)
self.add_music_to_playlist(file_path, level + 1)
elif os.path.isfile(file_path):
if not file_name.endswith(".mp3"):
continue
self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(file_path)))
item = QStandardItem(file_name)
item.setData(file_path, Qt.UserRole)
self.playlist_view.model().appendRow(item)
if __name__ == "__main__":
app = QApplication([])
media_player = MediaPlayer()
media_player.show()
app.exec_()
```
在这个示例中,我们通过递归遍历目录树来获取包含`*.mp3`和`*.mpe`文件的文件夹和文件。然后,我们将它们添加到QMediaPlaylist中,并在QListView中显示它们。最后,我们使用QMediaPlayer来播放选择的媒体。
阅读全文