class filesSelector(QWidget): def __init__(self, *args, **kwargs): #super(filesSelector, self).__init__(*args, **kwargs) #Widget for displaying all the options for adding files to the view self.directory_browse = QWidget() self.directory_browse_layout = QVBoxLayout() self.directory_browse.setLayout(self.directory_browse_layout) #List View for displaying the files which have been selected for processing self.file_list_view = QListView() self.file_list_view.setObjectName("treeView") self.directory_browse_layout.addWidget(self.file_list_view) #The widget within the Directory_Browse widget which will contain all the options for loading files self.file_option_widget = QWidget() self.file_option_widget_layout = QHBoxLayout() self.file_option_widget.setLayout(self.file_option_widget_layout) self.directory_browse_layout.addWidget(self.file_option_widget) #The button for browsing to the folder which needs to be added self.select_folder_button = QPushButton() self.select_folder_button.setObjectName("browseButton") self.select_folder_button.setText("Select Folder") self.file_option_widget_layout.addWidget(self.select_folder_button) #The button for adding selected files from a directory self.select_file_button = QPushButton() self.select_file_button.setObjectName("browseButton") self.select_file_button.setText("Select File") self.file_option_widget_layout.addWidget(self.select_file_button) #The widget which will contain the list of all the extensions which are to be added # self.file_extension_widget = QWidget() # self.file_extension_widget.setObjectName("fileExtensionWidget") # self.file_extension_widget_layout = QHBoxLayout() # self.file_extension_widget.setLayout(self.file_option_widget_layout) # self.file_option_widget_layout.addWidget(self.file_extension_widget) #What happens when we click the browse directory button? self.select_folder_button.clicked.connect(self.select_folder) #Custom model to hold the names of the all the files which are selected self.file_model = QStandardItemModel() def select_folder(self): dialog = QFileDialog() dialog.setFileMode(QFileDialog.Directory) dialog.setOption(QFileDialog.ShowDirsOnly) self.directoryUrl = dialog.getExistingDirectoryUrl() self.selected_folder = self.directoryUrl.toDisplayString()[7:] self.nameFileArray = [ f for f in os.listdir(self.selected_folder) if os.path.isfile(os.path.join(self.selected_folder, f)) ] # item = QStandardItem("All") # item.setCheckState(Qt.Checked) # item.setCheckable(True) #self.file_model.appendRow(item) #self.file_model, self.file_option_listview = self.create_checkBoxes(self.nameFileArray, self.file_model, self.file_option_listview) self.file_model = self.create_checkBoxes(self.nameFileArray, self.file_model, self.file_list_view) for name in self.nameFileArray: self.file_model.appendRow( self.append_checkbox(name, self.file_model, Qt.Checked)) self.file_list_view.setModel(self.file_model) #self.file_model, self.file_option_listview = self.create_checkBoxes(self.nameFileArray, self.file_model, self.file_option_listview) def create_checkBoxes(self, array, model, view): model.appendRow(self.append_checkbox("All", model, Qt.Checked)) # for item in array: # model = self.append_checkbox(item, model, Qt.Checked) # view.setModel(model) return model def append_checkbox(self, item, model, checkdStatus): item = QStandardItem(item) item.setCheckState(checkdStatus) item.setCheckable(True) #model.appendRow(item) return item
class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) self.setupUi(self) self.player = QMediaPlayer() self.player.error.connect(self.erroralert) self.player.play() # Setup the playlist. self.playlist = QMediaPlaylist() self.player.setPlaylist(self.playlist) # Add viewer for video playback, separate floating window. self.viewer = ViewerWindow(self) self.viewer.setWindowFlags(self.viewer.windowFlags() | Qt.WindowStaysOnTopHint) self.viewer.setMinimumSize(QSize(480, 360)) videoWidget = QVideoWidget() self.viewer.setCentralWidget(videoWidget) self.player.setVideoOutput(videoWidget) # Connect control buttons/slides for media player. self.playButton.pressed.connect(self.player.play) self.pauseButton.pressed.connect(self.player.pause) self.stopButton.pressed.connect(self.player.stop) self.volumeSlider.valueChanged.connect(self.player.setVolume) self.viewButton.toggled.connect(self.toggle_viewer) self.viewer.state.connect(self.viewButton.setChecked) self.previousButton.pressed.connect(self.playlist.previous) self.nextButton.pressed.connect(self.playlist.next) self.model = PlaylistModel(self.playlist) self.playlistView.setModel(self.model) self.playlist.currentIndexChanged.connect( self.playlist_position_changed) selection_model = self.playlistView.selectionModel() selection_model.selectionChanged.connect( self.playlist_selection_changed) self.player.durationChanged.connect(self.update_duration) self.player.positionChanged.connect(self.update_position) self.timeSlider.valueChanged.connect(self.player.setPosition) self.open_file_action.triggered.connect(self.open_file) self.setAcceptDrops(True) self.show() def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(484, 371) self.centralWidget = QWidget(MainWindow) sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.centralWidget.sizePolicy().hasHeightForWidth()) self.centralWidget.setSizePolicy(sizePolicy) self.centralWidget.setObjectName("centralWidget") self.horizontalLayout = QHBoxLayout(self.centralWidget) self.horizontalLayout.setContentsMargins(11, 11, 11, 11) self.horizontalLayout.setSpacing(6) self.horizontalLayout.setObjectName("horizontalLayout") self.verticalLayout = QVBoxLayout() self.verticalLayout.setSpacing(6) self.verticalLayout.setObjectName("verticalLayout") self.playlistView = QListView(self.centralWidget) self.playlistView.setAcceptDrops(True) self.playlistView.setProperty("showDropIndicator", True) self.playlistView.setDragDropMode(QAbstractItemView.DropOnly) self.playlistView.setAlternatingRowColors(True) self.playlistView.setUniformItemSizes(True) self.playlistView.setObjectName("playlistView") self.verticalLayout.addWidget(self.playlistView) self.horizontalLayout_4 = QHBoxLayout() self.horizontalLayout_4.setSpacing(6) self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.currentTimeLabel = QLabel(self.centralWidget) self.currentTimeLabel.setMinimumSize(QSize(80, 0)) self.currentTimeLabel.setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self.currentTimeLabel.setObjectName("currentTimeLabel") self.horizontalLayout_4.addWidget(self.currentTimeLabel) self.timeSlider = QSlider(self.centralWidget) self.timeSlider.setOrientation(Qt.Horizontal) self.timeSlider.setObjectName("timeSlider") self.horizontalLayout_4.addWidget(self.timeSlider) self.totalTimeLabel = QLabel(self.centralWidget) self.totalTimeLabel.setMinimumSize(QSize(80, 0)) self.totalTimeLabel.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.totalTimeLabel.setObjectName("totalTimeLabel") self.horizontalLayout_4.addWidget(self.totalTimeLabel) self.verticalLayout.addLayout(self.horizontalLayout_4) self.horizontalLayout_5 = QHBoxLayout() self.horizontalLayout_5.setSpacing(6) self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.previousButton = QPushButton(self.centralWidget) self.previousButton.setText("") icon = QIcon() icon.addPixmap(QPixmap("images/control-skip-180.png"), QIcon.Normal, QIcon.Off) self.previousButton.setIcon(icon) self.previousButton.setObjectName("previousButton") self.horizontalLayout_5.addWidget(self.previousButton) self.playButton = QPushButton(self.centralWidget) self.playButton.setText("") icon1 = QIcon() icon1.addPixmap(QPixmap("images/control.png"), QIcon.Normal, QIcon.Off) self.playButton.setIcon(icon1) self.playButton.setObjectName("playButton") self.horizontalLayout_5.addWidget(self.playButton) self.pauseButton = QPushButton(self.centralWidget) self.pauseButton.setText("") icon2 = QIcon() icon2.addPixmap(QPixmap("images/control-pause.png"), QIcon.Normal, QIcon.Off) self.pauseButton.setIcon(icon2) self.pauseButton.setObjectName("pauseButton") self.horizontalLayout_5.addWidget(self.pauseButton) self.stopButton = QPushButton(self.centralWidget) self.stopButton.setText("") icon3 = QIcon() icon3.addPixmap(QPixmap("images/control-stop-square.png"), QIcon.Normal, QIcon.Off) self.stopButton.setIcon(icon3) self.stopButton.setObjectName("stopButton") self.horizontalLayout_5.addWidget(self.stopButton) self.nextButton = QPushButton(self.centralWidget) self.nextButton.setText("") icon4 = QIcon() icon4.addPixmap(QPixmap("images/control-skip.png"), QIcon.Normal, QIcon.Off) self.nextButton.setIcon(icon4) self.nextButton.setObjectName("nextButton") self.horizontalLayout_5.addWidget(self.nextButton) self.viewButton = QPushButton(self.centralWidget) self.viewButton.setText("") icon5 = QIcon() icon5.addPixmap(QPixmap("images/application-image.png"), QIcon.Normal, QIcon.Off) self.viewButton.setIcon(icon5) self.viewButton.setCheckable(True) self.viewButton.setObjectName("viewButton") self.horizontalLayout_5.addWidget(self.viewButton) spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem) self.label = QLabel(self.centralWidget) self.label.setText("") self.label.setPixmap(QPixmap("images/speaker-volume.png")) self.label.setObjectName("label") self.horizontalLayout_5.addWidget(self.label) self.volumeSlider = QSlider(self.centralWidget) self.volumeSlider.setMaximum(100) self.volumeSlider.setProperty("value", 100) self.volumeSlider.setOrientation(Qt.Horizontal) self.volumeSlider.setObjectName("volumeSlider") self.horizontalLayout_5.addWidget(self.volumeSlider) self.verticalLayout.addLayout(self.horizontalLayout_5) self.horizontalLayout.addLayout(self.verticalLayout) MainWindow.setCentralWidget(self.centralWidget) self.menuBar = QMenuBar(MainWindow) self.menuBar.setGeometry(QRect(0, 0, 484, 22)) self.menuBar.setObjectName("menuBar") self.menuFIle = QMenu(self.menuBar) self.menuFIle.setObjectName("menuFIle") MainWindow.setMenuBar(self.menuBar) self.statusBar = QStatusBar(MainWindow) self.statusBar.setObjectName("statusBar") MainWindow.setStatusBar(self.statusBar) self.open_file_action = QAction(MainWindow) self.open_file_action.setObjectName("open_file_action") self.menuFIle.addAction(self.open_file_action) self.menuBar.addAction(self.menuFIle.menuAction()) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Failamp")) self.currentTimeLabel.setText(_translate("MainWindow", "0:00")) self.totalTimeLabel.setText(_translate("MainWindow", "0:00")) self.menuFIle.setTitle(_translate("MainWindow", "FIle")) self.open_file_action.setText(_translate("MainWindow", "Open file...")) def dragEnterEvent(self, e): if e.mimeData().hasUrls(): e.acceptProposedAction() def dropEvent(self, e): for url in e.mimeData().urls(): self.playlist.addMedia(QMediaContent(url)) self.model.layoutChanged.emit() # If not playing, seeking to first of newly added + play. if self.player.state() != QMediaPlayer.PlayingState: i = self.playlist.mediaCount() - len(e.mimeData().urls()) self.playlist.setCurrentIndex(i) self.player.play() def open_file(self): path, _ = QFileDialog.getOpenFileName( self, "Open file", "", "mp3 Audio (*.mp3);mp4 Video (*.mp4);Movie files (*.mov);All files (*.*)" ) if path: self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(path))) self.model.layoutChanged.emit() def update_duration(self, duration): print("!", duration) print("?", self.player.duration()) self.timeSlider.setMaximum(duration) if duration >= 0: self.totalTimeLabel.setText(hhmmss(duration)) def update_position(self, position): if position >= 0: self.currentTimeLabel.setText(hhmmss(position)) # Disable the events to prevent updating triggering a setPosition event (can cause stuttering). self.timeSlider.blockSignals(True) self.timeSlider.setValue(position) self.timeSlider.blockSignals(False) def playlist_selection_changed(self, ix): # We receive a QItemSelection from selectionChanged. i = ix.indexes()[0].row() self.playlist.setCurrentIndex(i) def playlist_position_changed(self, i): if i > -1: ix = self.model.index(i) self.playlistView.setCurrentIndex(ix) def toggle_viewer(self, state): if state: self.viewer.show() else: self.viewer.hide() def erroralert(self, *args): print(args)
class FormMidContextWidget(QtWidgets.QWidget): #定义成员变量 #定义信号 def __init__(self): super().__init__() self.__initForm() self.__loadMusicLibraryListWidgetData() self.__loadSongsNameListWidgetData() self.__loadCollectionMusicListWidgetData() def __initForm(self): self.mainLayout = QHBoxLayout() self.mainLayout.setContentsMargins(1, 1, 1, 1) self.contextFrame = QtWidgets.QFrame() self.contextFrame.setObjectName("contextFrame") self.midContextLayout = QHBoxLayout() self.midContextLayout.setSpacing(1) self.midContextLayout.setContentsMargins(0, 1, 0, 1) self.midLeftFrame = QtWidgets.QFrame() self.midLeftFrame.setObjectName("midLeftFrame") self.midLeftLayout = QVBoxLayout() self.midLeftFrame.setLayout(self.midLeftLayout) self.midLeftLayout.setSpacing(0) self.midLeftLayout.setContentsMargins(2, 2, 2, 2) self.musicLibraryTitleLabel = QLabel("音乐库") self.textFont = QFont("微软雅黑", 11) self.textFont.setBold(True) self.musicLibraryTitleLabel.setFont(self.textFont) self.musicLibraryListView = QListView() self.musicLibraryListView.setFixedHeight(140) self.musicLibraryListView.setObjectName('musicLibraryListView') self.musicLibraryListView.setFixedWidth(190) self.localCollectionTitleLabel = QLabel("本地收藏") self.localCollectionTitleLabel.setFont(self.textFont) self.localCollectionListView = QListView() self.localCollectionListView.setObjectName('localCollectionListView') self.localCollectionListView.setFixedWidth(190) self.songsNameListTitleLabel = QLabel("歌单列表") self.songsNameListTitleLabel.setFont(self.textFont) self.songsNameListView = QListView() self.songsNameListView.setObjectName('songsNameListView') self.songsNameListView.setFixedWidth(190) self.songsNameListView.setFixedHeight(300) self.midLeftLayout.addWidget(self.musicLibraryTitleLabel) self.midLeftLayout.addWidget(self.musicLibraryListView) self.midLeftLayout.addWidget(self.songsNameListTitleLabel) self.midLeftLayout.addWidget(self.songsNameListView) self.midLeftLayout.addWidget(self.localCollectionTitleLabel) self.midLeftLayout.addWidget(self.localCollectionListView) self.rightContextStackWidget = QStackedWidget() self.testLabel = QLabel() self.testLabel.setScaledContents(True) self.testLabel.setPixmap( QPixmap(":/icon/Resources/icon/icon-meinv.jpg").scaled( self.testLabel.width(), self.testLabel.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) self.rightContextStackWidget.addWidget(self.testLabel) self.midContextLayout.addWidget(self.midLeftFrame) self.midContextLayout.addWidget(self.rightContextStackWidget) self.midContextLayout.setStretch(0, 0) self.midContextLayout.setStretch(1, 1) self.contextFrame.setLayout(self.midContextLayout) self.mainLayout.addWidget(self.contextFrame) self.setLayout(self.mainLayout) def __loadMusicLibraryListWidgetData(self): self.textFont = QFont("微软雅黑", 11) self.localMusicItemData = QStandardItem("本地音乐") self.localMusicItemData.setFont(self.textFont) self.localMusicItemData.setEditable(False) self.localMusicItemData.setData( QIcon(":/icon/Resources/icon/icon-localmusic.svg"), Qt.DecorationRole) self.wangyiYunItemData = QStandardItem("网易云音乐") self.wangyiYunItemData.setFont(self.textFont) self.wangyiYunItemData.setEditable(False) self.wangyiYunItemData.setData( QIcon(":/icon/Resources/icon/icon-wangyiyunmusic.svg"), Qt.DecorationRole) self.qqMusicItemData = QStandardItem("QQ音乐") self.qqMusicItemData.setFont(self.textFont) self.qqMusicItemData.setEditable(False) self.qqMusicItemData.setData( QIcon(":/icon/Resources/icon/icon-qqmusic.svg"), Qt.DecorationRole) self.xiaMiItemData = QStandardItem("虾米音乐") self.xiaMiItemData.setFont(self.textFont) self.xiaMiItemData.setEditable(False) self.xiaMiItemData.setData( QIcon(":/icon/Resources/icon/icon-xiamimusic.svg"), Qt.DecorationRole) self.musicLibraryModel = QStandardItemModel() self.musicLibraryModel.appendRow(self.localMusicItemData) self.musicLibraryModel.appendRow(self.wangyiYunItemData) self.musicLibraryModel.appendRow(self.qqMusicItemData) self.musicLibraryModel.appendRow(self.xiaMiItemData) self.musicLibraryListView.setSpacing(2) self.musicLibraryListView.setModel(self.musicLibraryModel) def __loadSongsNameListWidgetData(self): self.wubaiItemData = QStandardItem("伍佰&China blue") self.textFont = QFont("微软雅黑", 11) self.wubaiItemData.setFont(self.textFont) self.wubaiItemData.setEditable(False) self.wubaiItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.zongguanxianItemData = QStandardItem("纵贯线") self.zongguanxianItemData.setFont(self.textFont) self.zongguanxianItemData.setEditable(False) self.zongguanxianItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.zhaoleiItemData = QStandardItem("赵雷专辑") self.zhaoleiItemData.setFont(self.textFont) self.zhaoleiItemData.setEditable(False) self.zhaoleiItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.xuweiItemData = QStandardItem("许巍专辑") self.xuweiItemData.setFont(self.textFont) self.xuweiItemData.setEditable(False) self.xuweiItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.zhouhuajianItemData = QStandardItem("周华健专辑") self.zhouhuajianItemData.setFont(self.textFont) self.zhouhuajianItemData.setEditable(False) self.zhouhuajianItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.banderuiItemData = QStandardItem("班得瑞专辑") self.banderuiItemData.setFont(self.textFont) self.banderuiItemData.setEditable(False) self.banderuiItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.yaogunItemData = QStandardItem("摇滚专辑") self.yaogunItemData.setFont(self.textFont) self.yaogunItemData.setEditable(False) self.yaogunItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.yinshiyuanshenItemData = QStandardItem("影视原声") self.yinshiyuanshenItemData.setFont(self.textFont) self.yinshiyuanshenItemData.setEditable(False) self.yinshiyuanshenItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.minyaoItemData = QStandardItem("民谣专辑") self.minyaoItemData.setFont(self.textFont) self.minyaoItemData.setEditable(False) self.minyaoItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.tianlaizhiyinItemData = QStandardItem("天籁之音") self.tianlaizhiyinItemData.setFont(self.textFont) self.tianlaizhiyinItemData.setEditable(False) self.tianlaizhiyinItemData.setData( QIcon(":/icon/Resources/icon/icon-gedanlist.svg"), Qt.DecorationRole) self.songsNameListModel = QStandardItemModel() self.songsNameListModel.appendRow(self.wubaiItemData) self.songsNameListModel.appendRow(self.zongguanxianItemData) self.songsNameListModel.appendRow(self.zhaoleiItemData) self.songsNameListModel.appendRow(self.xuweiItemData) self.songsNameListModel.appendRow(self.zhouhuajianItemData) self.songsNameListModel.appendRow(self.banderuiItemData) self.songsNameListModel.appendRow(self.yaogunItemData) self.songsNameListModel.appendRow(self.yinshiyuanshenItemData) self.songsNameListModel.appendRow(self.minyaoItemData) self.songsNameListModel.appendRow(self.tianlaizhiyinItemData) self.songsNameListView.setSpacing(2) self.songsNameListView.setModel(self.songsNameListModel) def __loadCollectionMusicListWidgetData(self): self.jingdianItemData = QStandardItem("经典老歌") self.textFont = QFont("微软雅黑", 11) self.jingdianItemData.setFont(self.textFont) self.jingdianItemData.setEditable(False) self.jingdianItemData.setData( QIcon(":/icon/Resources/icon/icon-collectionmusic.svg"), Qt.DecorationRole) self.qinyinyueItemData = QStandardItem("轻音乐系") self.qinyinyueItemData.setFont(self.textFont) self.qinyinyueItemData.setEditable(False) self.qinyinyueItemData.setData( QIcon(":/icon/Resources/icon/icon-collectionmusic.svg"), Qt.DecorationRole) self.jitaxilieItemData = QStandardItem("吉他系列") self.jitaxilieItemData.setFont(self.textFont) self.jitaxilieItemData.setEditable(False) self.jitaxilieItemData.setData( QIcon(":/icon/Resources/icon/icon-collectionmusic.svg"), Qt.DecorationRole) self.remengequItemData = QStandardItem("热门歌曲") self.remengequItemData.setFont(self.textFont) self.remengequItemData.setEditable(False) self.remengequItemData.setData( QIcon(":/icon/Resources/icon/icon-collectionmusic.svg"), Qt.DecorationRole) self.songsNameModel = QStandardItemModel() self.songsNameModel.appendRow(self.jingdianItemData) self.songsNameModel.appendRow(self.qinyinyueItemData) self.songsNameModel.appendRow(self.jitaxilieItemData) self.songsNameModel.appendRow(self.remengequItemData) self.localCollectionListView.setSpacing(2) self.localCollectionListView.setModel(self.songsNameModel)