def main(_): gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.4) with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) as sess: if cfg.env_type == 'simple': env = SimpleGymEnvironment(cfg) else: env = GymEnvironment(cfg) if not os.path.exists('/tmp/model_dir'): os.mkdir('/tmp/model_dir') player = Player(cfg, env, sess, '/tmp/model_dir') player.play(load_model=False)
class Ui_Form(QtGui.QMainWindow): def __init__(self): super(Ui_Form, self).__init__() self.file_manager = FileManager() self.song_data = Song() self.queue = Queue.Queue(maxsize=10) self.player_core = Player(self.song_data, self.queue, self) self.setupUi(self) self.connectActions() self.refreshSongList() self.quit = False self.wasPlaying = False self.is_paused = False self.totalTime = '00:00' self.total_int_time = 0 self.update_tick_process_start = False self.slider_in_pressed_value = 0 # seekslider first value Thread(target=self.about_to_stop).start() def closeEvent(self, *args, **kwargs): # catch exit sinal and stop the subprocess self.queue.put(None) if self.wasPlaying: self.wasPlaying = False self.stopSong() self.freePlayer() self.quit = True super(Ui_Form, self).closeEvent(*args, **kwargs) def keyPressEvent(self, event): key = event.key() print key # if key == QtCore.Qt.Key_Left: # print('Left Arrow Pressed') # 连接鼠标Action def connectActions(self): QtCore.QObject.connect( self.playButton, QtCore.SIGNAL('clicked()'), self.playSong) QtCore.QObject.connect( self.stopButton, QtCore.SIGNAL('clicked()'), self.stopSong) QtCore.QObject.connect( self.addFilesButton, QtCore.SIGNAL('clicked()'), self.addFiles) QtCore.QObject.connect( self.delFilesButton, QtCore.SIGNAL('clicked()'), self.delFiles) QtCore.QObject.connect( self.nextButton, QtCore.SIGNAL('clicked()'), self.nextSong) QtCore.QObject.connect( self.previousButton, QtCore.SIGNAL('clicked()'), self.previousSong) QtCore.QObject.connect( self.seekSlider, QtCore.SIGNAL('sliderPressed()'), self.slider_pressed) QtCore.QObject.connect( self.seekSlider, QtCore.SIGNAL('sliderReleased()'), self.slider_released) QtCore.QObject.connect( self.volumeSlider, QtCore.SIGNAL('sliderReleased()'), self.volume_slider_released) QtCore.QObject.connect( self.volumeSlider, QtCore.SIGNAL('valueChanged(int)'), self.volume_slider_released) # 连接DEL按钮 QtCore.QObject.connect( (QtGui.QShortcut( QtGui.QKeySequence( QtCore.Qt.Key_Delete), self.listWidget)), QtCore.SIGNAL('activated()'), self.delFiles) self.listWidget.mouseDoubleClickEvent = self.doubleSelectSong def doubleSelectSong(self, a): self.wasPlaying = False song_id = unicode(self.listWidget.selectedItems()[ 0].text()).split('#')[0].strip() self.songSelected(song_id) # 通过list选择歌曲 def songSelected(self, song_id): self.player_core.double_select_song( self.song_data.get_song_by_id(song_id).path) self.getTotalTime() self.updateMetaInfo() self.wasPlaying = True self.buttonChange(self.wasPlaying) self.set_update_tick_sub_process() def set_list_widget_selected(self, song_id): for item in self.iter_all_list_items(): if str(song_id) in unicode(item[1].text()): self.listWidget.setCurrentRow(item[0]) break def iter_all_list_items(self): for i in range(self.listWidget.count()): yield i, self.listWidget.item(i) def addFiles(self): files = QtGui.QFileDialog.getOpenFileNames( self, "Please select songs", "", self.tr("Song Files(*.*)")) new = [] for file in files: print unicode(file) new.append(unicode(file).encode('utf-8')) self.file_manager.add_files(new) self.refreshSongList() def delFiles(self): selectedItems = self.listWidget.selectedItems() if selectedItems: ids = [int(unicode(s.text()).split('#')[0]) for s in selectedItems] if self.song_data.current_song_id in ids: self.stopSong() self.file_manager.del_files(ids) self.refreshSongList() else: warning = QtGui.QMessageBox(self) warning.setWindowTitle('Warning!') warning.setText('NO ITEM SELECTED!') warning.show() def buttonChange(self, playState): if playState: self.playButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_pause.png);")) self.playButton.clicked.disconnect() QtCore.QObject.connect( self.playButton, QtCore.SIGNAL('clicked()'), self.pauseSong) else: self.playButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_play.png);")) self.playButton.clicked.disconnect() QtCore.QObject.connect( self.playButton, QtCore.SIGNAL('clicked()'), self.playSong) def set_update_tick_sub_process(self): if not self.update_tick_process_start: Thread(target=self.updateTick).start() self.update_tick_process_start = True def playSong(self): if not self.wasPlaying and self.is_paused: self.is_paused = False self.player_core.pause() self.wasPlaying = True self.buttonChange(self.wasPlaying) return else: self.player_core.play() self.getTotalTime() self.updateMetaInfo() self.set_list_widget_selected(self.song_data.current_song_id) self.wasPlaying = True self.set_update_tick_sub_process() self.buttonChange(self.wasPlaying) def pauseSong(self): self.wasPlaying = False self.is_paused = True self.player_core.pause() self.buttonChange(self.wasPlaying) def stopSong(self): self.wasPlaying = False self.is_paused = False self.player_core.stop() self.totalTime = '00:00' self.buttonChange(self.wasPlaying) self.setLabelText(1, True) def freePlayer(self): self.player_core.free_player() def nextSong(self): self.is_paused = False self.wasPlaying = False self.player_core.next() self.getTotalTime() self.updateMetaInfo() self.set_list_widget_selected(self.song_data.current_song_id) self.wasPlaying = True self.buttonChange(self.wasPlaying) self.set_update_tick_sub_process() def previousSong(self): self.is_paused = False self.wasPlaying = False self.player_core.previous() self.getTotalTime() self.updateMetaInfo() self.set_list_widget_selected(self.song_data.current_song_id) self.wasPlaying = True self.buttonChange(self.wasPlaying) self.set_update_tick_sub_process() def slider_pressed(self): self.slider_in_pressed_value = self.seekSlider.value() def slider_released(self): seek_time = (self.seekSlider.value() - self.slider_in_pressed_value) * self.total_int_time / 100 if seek_time != 0: self.player_core.seek(seek_time) def volume_slider_released(self): vol = self.volumeSlider.value() if vol == 99: vol = 100 self.volumeDisplayLabel.setText(_fromUtf8(str(vol))) self.player_core.set_volume(vol) def setLabelText(self, text, default=True): if default: self.label.setText( _translate( "Form", "QPlayer\nAuthor:MarcoQin <*****@*****.**>", None)) else: self.label.setText(text) def updateMetaInfo(self): info = self.file_info tp = ('album', 'artist', 'genre', 'title') if not info['title']: info['title'] = info['name'].split('.')[0] if not info['genre']: info['genre'] = 'ACG' string = '\n'.join( '{0}: {1}'.format( k, v.encode('utf-8')) for k, v in info.items() if k in tp) string = QtCore.QString.fromUtf8(string) self.setLabelText(string, False) # 设置播放器时间 def getTotalTime(self): print 'get_total time' self.file_info = self.player_core.file_info t = self.file_info['length'] print t int_t = int(float(t)) m, s = divmod(int(float(t)), 60) if m < 10: m = '0{0}'.format(m) if s < 10: s = '0{0}'.format(s) t = '{0}:{1}'.format(m, s) self.totalTime = t self.total_int_time = int_t def about_to_stop(self): while True: if self.quit: break cmd = self.queue.get() print "self.queue.get(): ", cmd if not cmd: break if cmd: self.wasPlaying = False self.is_paused = False event = self.nextButton.click() try: QtGui.QApplication.sendEvent(event) except Exception: pass def updateTick(self): while True: try: if self.quit: self.update_tick_process_start = False break if not self.wasPlaying and not self.is_paused: time.sleep(1) continue songTime = int(self.player_core.time_pos) self.total_int_time = self.player_core.total_length persent = (songTime * 1.0 / self.total_int_time) * 100 m, s = divmod(songTime, 60) if m < 10: m = '0{0}'.format(m) if s < 10: s = '0{0}'.format(s) songTime = '{0}:{1}'.format(m, s) m, s = divmod(int(self.total_int_time), 60) if m < 10: m = '0{0}'.format(m) if s < 10: s = '0{0}'.format(s) t = '{0}:{1}'.format(m, s) self.totalTime = t tick = songTime + '/' + self.totalTime self.lcdNumber.display(tick) self.seekSlider.setValue(persent) time.sleep(1) except Exception as e: print e time.sleep(1) continue def refreshSongList(self): self.listWidget.clear() song_data = self.song_data.get_all_songs() for song in song_data: self.listWidget.addItem(u'{0}# {1}'.format(song.id, song.name)) def setupUi(self, Form): Form.setObjectName(_fromUtf8("Form")) Form.resize(337, 475) Form.setMinimumSize(QtCore.QSize(337, 475)) Form.setMaximumSize(QtCore.QSize(337, 475)) # 用“#name{语句}来限定form的背景,不会改变form上的别的widget的背景。 Form.setStyleSheet( _fromUtf8("#Form{background-image: url(:/bg/bg2.jpg)}")) self.gridLayoutWidget = QtGui.QWidget(Form) self.gridLayoutWidget.setGeometry(QtCore.QRect(20, 127, 301, 41)) self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget")) self.gridLayout_3 = QtGui.QGridLayout(self.gridLayoutWidget) self.gridLayout_3.setMargin(0) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.lcdNumber = QtGui.QLCDNumber(self.gridLayoutWidget) self.lcdNumber.setFrameShadow(QtGui.QFrame.Plain) self.lcdNumber.setLineWidth(1) self.lcdNumber.setSmallDecimalPoint(False) self.lcdNumber.setNumDigits(11) self.lcdNumber.setObjectName(_fromUtf8("lcdNumber")) self.gridLayout_3.addWidget(self.lcdNumber, 0, 5, 1, 1) self.stopButton = QtGui.QPushButton(self.gridLayoutWidget) self.stopButton.setMinimumSize(QtCore.QSize(35, 35)) self.stopButton.setMaximumSize(QtCore.QSize(35, 35)) self.stopButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_stop.png);")) self.stopButton.setText(_fromUtf8("")) self.stopButton.setIconSize(QtCore.QSize(35, 35)) self.stopButton.setObjectName(_fromUtf8("stopButton")) self.gridLayout_3.addWidget(self.stopButton, 0, 1, 1, 1) self.playButton = QtGui.QPushButton(self.gridLayoutWidget) self.playButton.setMinimumSize(QtCore.QSize(35, 35)) self.playButton.setMaximumSize(QtCore.QSize(35, 35)) self.playButton.setBaseSize(QtCore.QSize(35, 35)) self.playButton.setWhatsThis(_fromUtf8("")) self.playButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_play.png);")) self.playButton.setText(_fromUtf8("")) self.playButton.setObjectName(_fromUtf8("playButton")) self.gridLayout_3.addWidget(self.playButton, 0, 0, 1, 1) self.nextButton = QtGui.QPushButton(self.gridLayoutWidget) self.nextButton.setMinimumSize(QtCore.QSize(35, 35)) self.nextButton.setMaximumSize(QtCore.QSize(35, 35)) self.nextButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_next.png);")) self.nextButton.setText(_fromUtf8("")) self.nextButton.setObjectName(_fromUtf8("nextButton")) self.gridLayout_3.addWidget(self.nextButton, 0, 3, 1, 1) self.previousButton = QtGui.QPushButton(self.gridLayoutWidget) self.previousButton.setMinimumSize(QtCore.QSize(35, 35)) self.previousButton.setMaximumSize(QtCore.QSize(35, 35)) self.previousButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_previous.png);")) self.previousButton.setText(_fromUtf8("")) self.previousButton.setIconSize(QtCore.QSize(35, 35)) self.previousButton.setObjectName(_fromUtf8("previousButton")) self.gridLayout_3.addWidget(self.previousButton, 0, 2, 1, 1) self.seekSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.seekSlider.setGeometry(QtCore.QRect(20, 181, 301, 20)) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.seekSlider.setFont(font) self.seekSlider.setMouseTracking(False) self.seekSlider.setAutoFillBackground(False) self.seekSlider.setObjectName(_fromUtf8("seekSlider")) # self.seekSlider.setEnabled(False) self.horizontalLayoutWidget = QtGui.QWidget(Form) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 419, 301, 41)) self.horizontalLayoutWidget.setObjectName( _fromUtf8("horizontalLayoutWidget")) self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setMargin(0) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.volumeLabel = QtGui.QLabel(self.horizontalLayoutWidget) self.volumeLabel.setMinimumSize(QtCore.QSize(20, 20)) self.volumeLabel.setMaximumSize(QtCore.QSize(20, 20)) self.volumeLabel.setText(_fromUtf8("vol")) self.volumeLabel.setObjectName(_fromUtf8("volumeLabel")) self.horizontalLayout.addWidget(self.volumeLabel) self.volumeSlider= QtGui.QSlider(QtCore.Qt.Horizontal, self) self.volumeSlider.setMaximumWidth(100) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.volumeSlider.setFont(font) self.volumeSlider.setMouseTracking(False) self.volumeSlider.setAutoFillBackground(False) self.volumeSlider.setObjectName(_fromUtf8("volumeSlider")) self.horizontalLayout.addWidget(self.volumeSlider) self.volumeSlider.setValue(100) self.volumeDisplayLabel = QtGui.QLabel(self.horizontalLayoutWidget) self.volumeDisplayLabel.setMinimumSize(QtCore.QSize(40, 20)) self.volumeDisplayLabel.setMaximumSize(QtCore.QSize(40, 20)) self.volumeDisplayLabel.setText(_fromUtf8("100")) self.volumeDisplayLabel.setObjectName(_fromUtf8("volumeDisplayLabel")) self.horizontalLayout.addWidget(self.volumeDisplayLabel) self.addFilesButton = QtGui.QPushButton(self.horizontalLayoutWidget) self.addFilesButton.setMinimumSize(QtCore.QSize(35, 35)) self.addFilesButton.setMaximumSize(QtCore.QSize(35, 35)) self.addFilesButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_add.png);")) self.addFilesButton.setText(_fromUtf8("")) self.addFilesButton.setObjectName(_fromUtf8("addFilesButton")) self.horizontalLayout.addWidget(self.addFilesButton) self.delFilesButton = QtGui.QPushButton(self.horizontalLayoutWidget) self.delFilesButton.setMinimumSize(QtCore.QSize(35, 35)) self.delFilesButton.setMaximumSize(QtCore.QSize(35, 35)) self.delFilesButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_del.png);")) self.delFilesButton.setText(_fromUtf8("")) self.delFilesButton.setObjectName(_fromUtf8("delFilesButton")) self.horizontalLayout.addWidget(self.delFilesButton) self.listWidget = QtGui.QListWidget(Form) self.listWidget.setGeometry(QtCore.QRect(20, 213, 301, 192)) self.listWidget.setStyleSheet( _fromUtf8( "background-color: rgb(189, 213, 231);\n" "background-color: qlineargradient(spread:reflect, x1:0.358, y1:0.880682, x2:1, y2:0, stop:0.244318 rgba(125, 178, 236, 255), stop:1 rgba(255, 255, 255, 255));")) self.listWidget.setObjectName(_fromUtf8("listWidget")) self.listWidget.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) # 设置多选模式,用于多文件删除 self.label = QtGui.QLabel(Form) self.label.setGeometry(QtCore.QRect(20, 10, 301, 110)) self.label.setAutoFillBackground(False) self.label.setStyleSheet( _fromUtf8( "border-image: url(:/bg/lable.png);\n" "background-image: url(:/bg/bg.png);")) self.label.setFrameShadow(QtGui.QFrame.Plain) self.label.setLineWidth(1) self.label.setTextFormat(QtCore.Qt.AutoText) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName(_fromUtf8("label")) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): Form.setWindowTitle(_translate("Form", "QPlayer", None)) self.label.setText( _translate( "Form", "QPlayer\nAuthor:MarcoQin <*****@*****.**>", None)) def hide_ui(self): items = [ 'label', 'listWidget', 'delFilesButton', 'addFilesButton', 'neteasePlayListButton', 'normalPlayListButton', 'seekSlider', 'previousButton', 'nextButton', 'playButton', 'stopButton', 'lcdNumber', 'horizontalLayoutWidget'] self.setMaximumSize(QtCore.QSize(1280, 720)) self.setMinimumSize(QtCore.QSize(1280, 720)) self.resize(640, 480) for item in items: getattr(self, item).hide()
class Ui_Form(QtGui.QMainWindow): def __init__(self): super(Ui_Form, self).__init__() self.file_manager = FileManager() self.song_data = Song() self.queue = Queue.Queue(maxsize=10) self.player_core = Player(self.song_data, self.queue, self) self.setupUi(self) self.connectActions() self.refreshSongList() self.quit = False self.wasPlaying = False self.is_paused = False self.totalTime = '00:00' self.total_int_time = 0 self.update_tick_process_start = False self.slider_in_pressed_value = 0 # seekslider first value Thread(target=self.about_to_stop).start() def closeEvent(self, *args, **kwargs): # catch exit sinal and stop the subprocess self.queue.put(None) if self.wasPlaying: self.wasPlaying = False self.stopSong() self.freePlayer() self.quit = True super(Ui_Form, self).closeEvent(*args, **kwargs) def keyPressEvent(self, event): key = event.key() print key # if key == QtCore.Qt.Key_Left: # print('Left Arrow Pressed') # 连接鼠标Action def connectActions(self): QtCore.QObject.connect(self.playButton, QtCore.SIGNAL('clicked()'), self.playSong) QtCore.QObject.connect(self.stopButton, QtCore.SIGNAL('clicked()'), self.stopSong) QtCore.QObject.connect(self.addFilesButton, QtCore.SIGNAL('clicked()'), self.addFiles) QtCore.QObject.connect(self.delFilesButton, QtCore.SIGNAL('clicked()'), self.delFiles) QtCore.QObject.connect(self.nextButton, QtCore.SIGNAL('clicked()'), self.nextSong) QtCore.QObject.connect(self.previousButton, QtCore.SIGNAL('clicked()'), self.previousSong) QtCore.QObject.connect(self.seekSlider, QtCore.SIGNAL('sliderPressed()'), self.slider_pressed) QtCore.QObject.connect(self.seekSlider, QtCore.SIGNAL('sliderReleased()'), self.slider_released) QtCore.QObject.connect(self.volumeSlider, QtCore.SIGNAL('sliderReleased()'), self.volume_slider_released) QtCore.QObject.connect(self.volumeSlider, QtCore.SIGNAL('valueChanged(int)'), self.volume_slider_released) # 连接DEL按钮 QtCore.QObject.connect((QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.listWidget)), QtCore.SIGNAL('activated()'), self.delFiles) self.listWidget.mouseDoubleClickEvent = self.doubleSelectSong def doubleSelectSong(self, a): self.wasPlaying = False song_id = unicode( self.listWidget.selectedItems()[0].text()).split('#')[0].strip() self.songSelected(song_id) # 通过list选择歌曲 def songSelected(self, song_id): self.player_core.double_select_song( self.song_data.get_song_by_id(song_id).path) self.getTotalTime() self.updateMetaInfo() self.wasPlaying = True self.buttonChange(self.wasPlaying) self.set_update_tick_sub_process() def set_list_widget_selected(self, song_id): for item in self.iter_all_list_items(): if str(song_id) in unicode(item[1].text()): self.listWidget.setCurrentRow(item[0]) break def iter_all_list_items(self): for i in range(self.listWidget.count()): yield i, self.listWidget.item(i) def addFiles(self): files = QtGui.QFileDialog.getOpenFileNames(self, "Please select songs", "", self.tr("Song Files(*.*)")) new = [] for file in files: print unicode(file) new.append(unicode(file).encode('utf-8')) self.file_manager.add_files(new) self.refreshSongList() def delFiles(self): selectedItems = self.listWidget.selectedItems() if selectedItems: ids = [int(unicode(s.text()).split('#')[0]) for s in selectedItems] if self.song_data.current_song_id in ids: self.stopSong() self.file_manager.del_files(ids) self.refreshSongList() else: warning = QtGui.QMessageBox(self) warning.setWindowTitle('Warning!') warning.setText('NO ITEM SELECTED!') warning.show() def buttonChange(self, playState): if playState: self.playButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_pause.png);")) self.playButton.clicked.disconnect() QtCore.QObject.connect(self.playButton, QtCore.SIGNAL('clicked()'), self.pauseSong) else: self.playButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_play.png);")) self.playButton.clicked.disconnect() QtCore.QObject.connect(self.playButton, QtCore.SIGNAL('clicked()'), self.playSong) def set_update_tick_sub_process(self): if not self.update_tick_process_start: Thread(target=self.updateTick).start() self.update_tick_process_start = True def playSong(self): if not self.wasPlaying and self.is_paused: self.is_paused = False self.player_core.pause() self.wasPlaying = True self.buttonChange(self.wasPlaying) return else: self.player_core.play() self.getTotalTime() self.updateMetaInfo() self.set_list_widget_selected(self.song_data.current_song_id) self.wasPlaying = True self.set_update_tick_sub_process() self.buttonChange(self.wasPlaying) def pauseSong(self): self.wasPlaying = False self.is_paused = True self.player_core.pause() self.buttonChange(self.wasPlaying) def stopSong(self): self.wasPlaying = False self.is_paused = False self.player_core.stop() self.totalTime = '00:00' self.buttonChange(self.wasPlaying) self.setLabelText(1, True) def freePlayer(self): self.player_core.free_player() def nextSong(self): self.is_paused = False self.wasPlaying = False self.player_core.next() self.getTotalTime() self.updateMetaInfo() self.set_list_widget_selected(self.song_data.current_song_id) self.wasPlaying = True self.buttonChange(self.wasPlaying) self.set_update_tick_sub_process() def previousSong(self): self.is_paused = False self.wasPlaying = False self.player_core.previous() self.getTotalTime() self.updateMetaInfo() self.set_list_widget_selected(self.song_data.current_song_id) self.wasPlaying = True self.buttonChange(self.wasPlaying) self.set_update_tick_sub_process() def slider_pressed(self): self.slider_in_pressed_value = self.seekSlider.value() def slider_released(self): seek_time = (self.seekSlider.value() - self.slider_in_pressed_value) * self.total_int_time / 100 if seek_time != 0: self.player_core.seek(seek_time) def volume_slider_released(self): vol = self.volumeSlider.value() if vol == 99: vol = 100 self.volumeDisplayLabel.setText(_fromUtf8(str(vol))) self.player_core.set_volume(vol) def setLabelText(self, text, default=True): if default: self.label.setText( _translate("Form", "QPlayer\nAuthor:MarcoQin <*****@*****.**>", None)) else: self.label.setText(text) def updateMetaInfo(self): info = self.file_info tp = ('album', 'artist', 'genre', 'title') if not info['title']: info['title'] = info['name'].split('.')[0] if not info['genre']: info['genre'] = 'ACG' string = '\n'.join('{0}: {1}'.format(k, v.encode('utf-8')) for k, v in info.items() if k in tp) string = QtCore.QString.fromUtf8(string) self.setLabelText(string, False) # 设置播放器时间 def getTotalTime(self): print 'get_total time' self.file_info = self.player_core.file_info t = self.file_info['length'] print t int_t = int(float(t)) m, s = divmod(int(float(t)), 60) if m < 10: m = '0{0}'.format(m) if s < 10: s = '0{0}'.format(s) t = '{0}:{1}'.format(m, s) self.totalTime = t self.total_int_time = int_t def about_to_stop(self): while True: if self.quit: break cmd = self.queue.get() print "self.queue.get(): ", cmd if not cmd: break if cmd: self.wasPlaying = False self.is_paused = False event = self.nextButton.click() try: QtGui.QApplication.sendEvent(event) except Exception: pass def updateTick(self): while True: try: if self.quit: self.update_tick_process_start = False break if not self.wasPlaying and not self.is_paused: time.sleep(1) continue songTime = int(self.player_core.time_pos) self.total_int_time = self.player_core.total_length persent = (songTime * 1.0 / self.total_int_time) * 100 m, s = divmod(songTime, 60) if m < 10: m = '0{0}'.format(m) if s < 10: s = '0{0}'.format(s) songTime = '{0}:{1}'.format(m, s) m, s = divmod(int(self.total_int_time), 60) if m < 10: m = '0{0}'.format(m) if s < 10: s = '0{0}'.format(s) t = '{0}:{1}'.format(m, s) self.totalTime = t tick = songTime + '/' + self.totalTime self.lcdNumber.display(tick) self.seekSlider.setValue(persent) time.sleep(1) except Exception as e: print e time.sleep(1) continue def refreshSongList(self): self.listWidget.clear() song_data = self.song_data.get_all_songs() for song in song_data: self.listWidget.addItem(u'{0}# {1}'.format(song.id, song.name)) def setupUi(self, Form): Form.setObjectName(_fromUtf8("Form")) Form.resize(337, 475) Form.setMinimumSize(QtCore.QSize(337, 475)) Form.setMaximumSize(QtCore.QSize(337, 475)) # 用“#name{语句}来限定form的背景,不会改变form上的别的widget的背景。 Form.setStyleSheet( _fromUtf8("#Form{background-image: url(:/bg/bg2.jpg)}")) self.gridLayoutWidget = QtGui.QWidget(Form) self.gridLayoutWidget.setGeometry(QtCore.QRect(20, 127, 301, 41)) self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget")) self.gridLayout_3 = QtGui.QGridLayout(self.gridLayoutWidget) self.gridLayout_3.setMargin(0) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.lcdNumber = QtGui.QLCDNumber(self.gridLayoutWidget) self.lcdNumber.setFrameShadow(QtGui.QFrame.Plain) self.lcdNumber.setLineWidth(1) self.lcdNumber.setSmallDecimalPoint(False) self.lcdNumber.setNumDigits(11) self.lcdNumber.setObjectName(_fromUtf8("lcdNumber")) self.gridLayout_3.addWidget(self.lcdNumber, 0, 5, 1, 1) self.stopButton = QtGui.QPushButton(self.gridLayoutWidget) self.stopButton.setMinimumSize(QtCore.QSize(35, 35)) self.stopButton.setMaximumSize(QtCore.QSize(35, 35)) self.stopButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_stop.png);")) self.stopButton.setText(_fromUtf8("")) self.stopButton.setIconSize(QtCore.QSize(35, 35)) self.stopButton.setObjectName(_fromUtf8("stopButton")) self.gridLayout_3.addWidget(self.stopButton, 0, 1, 1, 1) self.playButton = QtGui.QPushButton(self.gridLayoutWidget) self.playButton.setMinimumSize(QtCore.QSize(35, 35)) self.playButton.setMaximumSize(QtCore.QSize(35, 35)) self.playButton.setBaseSize(QtCore.QSize(35, 35)) self.playButton.setWhatsThis(_fromUtf8("")) self.playButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_play.png);")) self.playButton.setText(_fromUtf8("")) self.playButton.setObjectName(_fromUtf8("playButton")) self.gridLayout_3.addWidget(self.playButton, 0, 0, 1, 1) self.nextButton = QtGui.QPushButton(self.gridLayoutWidget) self.nextButton.setMinimumSize(QtCore.QSize(35, 35)) self.nextButton.setMaximumSize(QtCore.QSize(35, 35)) self.nextButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_next.png);")) self.nextButton.setText(_fromUtf8("")) self.nextButton.setObjectName(_fromUtf8("nextButton")) self.gridLayout_3.addWidget(self.nextButton, 0, 3, 1, 1) self.previousButton = QtGui.QPushButton(self.gridLayoutWidget) self.previousButton.setMinimumSize(QtCore.QSize(35, 35)) self.previousButton.setMaximumSize(QtCore.QSize(35, 35)) self.previousButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_previous.png);")) self.previousButton.setText(_fromUtf8("")) self.previousButton.setIconSize(QtCore.QSize(35, 35)) self.previousButton.setObjectName(_fromUtf8("previousButton")) self.gridLayout_3.addWidget(self.previousButton, 0, 2, 1, 1) self.seekSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.seekSlider.setGeometry(QtCore.QRect(20, 181, 301, 20)) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.seekSlider.setFont(font) self.seekSlider.setMouseTracking(False) self.seekSlider.setAutoFillBackground(False) self.seekSlider.setObjectName(_fromUtf8("seekSlider")) # self.seekSlider.setEnabled(False) self.horizontalLayoutWidget = QtGui.QWidget(Form) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 419, 301, 41)) self.horizontalLayoutWidget.setObjectName( _fromUtf8("horizontalLayoutWidget")) self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setMargin(0) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.volumeLabel = QtGui.QLabel(self.horizontalLayoutWidget) self.volumeLabel.setMinimumSize(QtCore.QSize(20, 20)) self.volumeLabel.setMaximumSize(QtCore.QSize(20, 20)) self.volumeLabel.setText(_fromUtf8("vol")) self.volumeLabel.setObjectName(_fromUtf8("volumeLabel")) self.horizontalLayout.addWidget(self.volumeLabel) self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.volumeSlider.setMaximumWidth(100) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.volumeSlider.setFont(font) self.volumeSlider.setMouseTracking(False) self.volumeSlider.setAutoFillBackground(False) self.volumeSlider.setObjectName(_fromUtf8("volumeSlider")) self.horizontalLayout.addWidget(self.volumeSlider) self.volumeSlider.setValue(100) self.volumeDisplayLabel = QtGui.QLabel(self.horizontalLayoutWidget) self.volumeDisplayLabel.setMinimumSize(QtCore.QSize(40, 20)) self.volumeDisplayLabel.setMaximumSize(QtCore.QSize(40, 20)) self.volumeDisplayLabel.setText(_fromUtf8("100")) self.volumeDisplayLabel.setObjectName(_fromUtf8("volumeDisplayLabel")) self.horizontalLayout.addWidget(self.volumeDisplayLabel) self.addFilesButton = QtGui.QPushButton(self.horizontalLayoutWidget) self.addFilesButton.setMinimumSize(QtCore.QSize(35, 35)) self.addFilesButton.setMaximumSize(QtCore.QSize(35, 35)) self.addFilesButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_add.png);")) self.addFilesButton.setText(_fromUtf8("")) self.addFilesButton.setObjectName(_fromUtf8("addFilesButton")) self.horizontalLayout.addWidget(self.addFilesButton) self.delFilesButton = QtGui.QPushButton(self.horizontalLayoutWidget) self.delFilesButton.setMinimumSize(QtCore.QSize(35, 35)) self.delFilesButton.setMaximumSize(QtCore.QSize(35, 35)) self.delFilesButton.setStyleSheet( _fromUtf8("border-image: url(:/btn/btn_del.png);")) self.delFilesButton.setText(_fromUtf8("")) self.delFilesButton.setObjectName(_fromUtf8("delFilesButton")) self.horizontalLayout.addWidget(self.delFilesButton) self.listWidget = QtGui.QListWidget(Form) self.listWidget.setGeometry(QtCore.QRect(20, 213, 301, 192)) self.listWidget.setStyleSheet( _fromUtf8( "background-color: rgb(189, 213, 231);\n" "background-color: qlineargradient(spread:reflect, x1:0.358, y1:0.880682, x2:1, y2:0, stop:0.244318 rgba(125, 178, 236, 255), stop:1 rgba(255, 255, 255, 255));" )) self.listWidget.setObjectName(_fromUtf8("listWidget")) self.listWidget.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) # 设置多选模式,用于多文件删除 self.label = QtGui.QLabel(Form) self.label.setGeometry(QtCore.QRect(20, 10, 301, 110)) self.label.setAutoFillBackground(False) self.label.setStyleSheet( _fromUtf8("border-image: url(:/bg/lable.png);\n" "background-image: url(:/bg/bg.png);")) self.label.setFrameShadow(QtGui.QFrame.Plain) self.label.setLineWidth(1) self.label.setTextFormat(QtCore.Qt.AutoText) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName(_fromUtf8("label")) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): Form.setWindowTitle(_translate("Form", "QPlayer", None)) self.label.setText( _translate("Form", "QPlayer\nAuthor:MarcoQin <*****@*****.**>", None)) def hide_ui(self): items = [ 'label', 'listWidget', 'delFilesButton', 'addFilesButton', 'neteasePlayListButton', 'normalPlayListButton', 'seekSlider', 'previousButton', 'nextButton', 'playButton', 'stopButton', 'lcdNumber', 'horizontalLayoutWidget' ] self.setMaximumSize(QtCore.QSize(1280, 720)) self.setMinimumSize(QtCore.QSize(1280, 720)) self.resize(640, 480) for item in items: getattr(self, item).hide()