def run(self): items = [] for i in range(1, 50): items.append("Application %d" % i) listBox = QListWidget() listBox.insertItems(0, items) listBox.insertItem(1, 'insert %d' % listBox.__len__()) listBox.resize(200, 150) listBox.move(10, 10) layout = QVBoxLayout() layout.addWidget(listBox) self.setLayout(layout) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Tooltips') self.show()
class MediaPlayer(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 400, 300) self.setWindowTitle('MediaPlayer') # Создание центрального виджета и настройка лайоута для поддержания формы интерфейса self.centerWindow = QWidget() self.mainGridLayout = QGridLayout() self.setCentralWidget(self.centerWindow) self.centralWidget().setLayout(self.mainGridLayout) # кнопки добавления и удаления трека self.addBtn = QPushButton('Add File', self) self.addBtn.clicked.connect(self.addFile) self.removeBtn = QPushButton('Remove File', self) self.removeBtn.clicked.connect(self.removeFile) self.mainGridLayout.addWidget(self.addBtn, 1, 0) self.mainGridLayout.addWidget(self.removeBtn, 1, 1) # Кнопка prev self.prevBtn = QPushButton('', self) prevIcon = QIcon() prevIcon.addFile('prev.png') # Назначаем иконку кнопке self.prevBtn.setIcon(prevIcon) # Размещаем кнопку на макете (лайоуте) self.mainGridLayout.addWidget(self.prevBtn, 3, 0) self.prevBtn.clicked.connect(self.PreviousTrack) # Кнопка play self.playBtn = QPushButton('', self) playIcon = QIcon() playIcon.addFile('play.png') self.playBtn.setIcon(playIcon) self.mainGridLayout.addWidget(self.playBtn, 3, 1) self.playBtn.clicked.connect(self.PlayMusic) # Кнопка pause self.pause = QPushButton('', self) pauseIcon = QIcon() pauseIcon.addFile('pause.png') self.pause.setIcon(pauseIcon) self.mainGridLayout.addWidget(self.pause, 3, 2) self.pause.clicked.connect(self.PauseMusic) # Кнопка next self.nextBtn = QPushButton('', self) nextIcon = QIcon() nextIcon.addFile('next.png') self.nextBtn.setIcon(nextIcon) self.mainGridLayout.addWidget(self.nextBtn, 3, 3) self.nextBtn.clicked.connect(self.NextTrack) # создание и настройка таймера и слайдеров self.timer = QTimer() self.timer.setInterval(100) self.timer.timeout.connect(self.Timercheck) self.timer.start() # Таймлайн self.TimeLine = QSlider(Qt.Horizontal, self) self.mainGridLayout.addWidget(self.TimeLine, 2, 0, 1, 4) self.TimeLine.sliderPressed.connect(self.TLPress) self.TimeLine.sliderReleased.connect(self.TLRelease) # Громкость self.Volume = QSlider(Qt.Vertical, self) self.Volume.setValue(50) self.mainGridLayout.addWidget(self.Volume, 1, 4, 3, 1) self.Volume.valueChanged[int].connect(self.changeVolume) # создаем экземпляр медиаплеера self.player = QMediaPlayer() self.player.stateChanged.connect(self.media_status_changed) # Создаем QListWidget() в котором будут хранится имена фалов self.listbox = QListWidget() self.listbox.doubleClicked.connect(self.PlayMusic) # Добавляем наш листбокс в макет addWidget(ОБЪЕКТ, СТРОКА, СТОЛБЕЦ, в высоту, в ширину ) self.mainGridLayout.addWidget(self.listbox, 0, 0, 1, 0) self.LoopCheckbox = QCheckBox('Зациклить', self) self.mainGridLayout.addWidget(self.LoopCheckbox, 1, 2) self.LoopCheckbox.stateChanged.connect(self.CheckboxState) # Создаем список в котором будут хранится имена и пути файлов в список будем добавлять объекты типа plItem self.playList = [] # Признак зацикленности плейлиста и флаг изменения состояния плеера self.loop = True self.IgnoreStateChange = False def CheckboxState(self, state): if state == Qt.Checked: self.IgnoreStateChange = True else: self.IgnoreStateChange = False # функционал таймера, кнопок и ползунков def addFile(self): # Получаем полное имя (с путём) fullFileName = QFileDialog.getOpenFileName( self, 'Add File', '', "Music files (*.mp3 *.ogg)")[0] # Разбиваем на части, используя re.split(r'[\\/]') из библиотеки работы с регулярными выражениями # регулярное выражение r'[\\/]' для того, что бы и виндовс и линукс нормально разбивало путь вин \, лин / splittedFileName = re.split(r'[\\/]', fullFileName) # Получаем имя файла shortFileName = splittedFileName[splittedFileName.__len__() - 1] # Добавляем в плейлист (который список) имя и соответсвующий ему полый путь с именем self.playList.append(plItem(fullFileName, shortFileName)) # Добавляем в listbox только имя файла self.listbox.addItem(shortFileName) # Удаление файла из листбокса def removeFile(self): if self.listbox.selectedItems(): self.playList.pop(self.listbox.currentIndex().row()) self.listbox.takeItem(self.listbox.currentIndex().row()) # Зависимости таймера и таймлайна def TLPress(self): self.timer.stop() self.player.setPosition( (self.player.duration() / 100) * self.TimeLine.value()) def TLRelease(self): self.player.setPosition( (self.player.duration() / 100) * self.TimeLine.value()) self.timer.start() def TLMoved(self): self.player.setPosition( (self.player.duration() / 100) * self.TimeLine.value()) def Timercheck(self): if self.player.duration() != 0: pos = self.player.position() / (self.player.duration() / 100) self.TimeLine.setValue(pos.__int__()) # Предыдущий трэк def PreviousTrack(self): if self.listbox.selectedItems() and (self.listbox.currentRow() != 0): self.IgnoreStateChange = True self.listbox.setCurrentRow(self.listbox.currentIndex().row() - 1) self.PlayMusic() self.IgnoreStateChange = False elif self.listbox.selectedItems() and (self.listbox.currentRow() == 0): self.IgnoreStateChange = True self.listbox.setCurrentRow(self.listbox.__len__() - 1) self.PlayMusic() self.IgnoreStateChange = False # Следующий трэк def NextTrack(self): if self.listbox.selectedItems() and (self.listbox.currentRow() != self.listbox.__len__() - 1): self.IgnoreStateChange = True self.listbox.setCurrentRow(self.listbox.currentIndex().row() + 1) self.PlayMusic() self.IgnoreStateChange = False elif self.listbox.selectedItems() and (self.listbox.currentRow() == self.listbox.__len__() - 1): self.IgnoreStateChange = True self.listbox.setCurrentRow(0) self.PlayMusic() self.IgnoreStateChange = False # громкость, play, pause def changeVolume(self, value): self.player.setVolume(value) def PauseMusic(self): self.player.pause() def PlayMusic(self): if self.listbox.selectedItems(): file = QUrl.fromLocalFile( self.playList[self.listbox.currentIndex().row()].fPath) content = QMediaContent(file) self.player.setMedia(content) self.player.setVolume(self.Volume.value()) self.player.play() elif self.listbox.__len__() > 0: self.listbox.setCurrentRow(0) file = QUrl.fromLocalFile( self.playList[self.listbox.currentIndex().row()].fPath) content = QMediaContent(file) self.player.setMedia(content) self.player.setVolume(self.Volume.value()) self.player.play() # Переход на след трек def media_status_changed(self, status): if not self.IgnoreStateChange: if status == QMediaPlayer.StoppedState: if (self.listbox.currentIndex().row() == self.listbox.__len__() - 1) and self.loop: self.listbox.setCurrentRow(0) file = QUrl.fromLocalFile( self.playList[self.listbox.currentIndex().row()].fPath) content = QMediaContent(file) self.player.setMedia(content) self.player.play() elif self.listbox.currentIndex().row( ) < self.listbox.__len__() - 1: self.listbox.setCurrentRow( self.listbox.currentIndex().row() + 1) file = QUrl.fromLocalFile( self.playList[self.listbox.currentIndex().row()].fPath) content = QMediaContent(file) self.player.setMedia(content) self.player.play() if self.IgnoreStateChange: self.player.play()
class QWPopupSelectColorBar(QDialog): def __init__(self, parent=None): QDialog.__init__(self, parent) # Confirmation buttons self.but_cancel = QPushButton('&Cancel') #self.but_apply = QPushButton('&Apply') #self.but_create = QPushButton('&Create') #cp.setIcons() #self.but_cancel.setIcon(cp.icon_button_cancel) #self.but_apply .setIcon(cp.icon_button_ok) #self.connect(self.but_cancel, QtCore.SIGNAL('clicked()'), self.onCancel) #self.connect(self.but_apply, QtCore.SIGNAL('clicked()'), self.onApply) #self.hbox = QVBoxLayout() #self.hbox.addWidget(self.but_cancel) #self.hbox.addWidget(self.but_apply) ##self.hbox.addStretch(1) self.ctab_selected = None self.list = QListWidget(parent) self.fill_list() vbox = QVBoxLayout() vbox.addWidget(self.list) self.setLayout(vbox) self.but_cancel.clicked.connect(self.onCancel) self.list.itemClicked.connect(self.onItemClick) self.showToolTips() self.setStyle() def fill_list(self): for i in range(1, 9): item = QListWidgetItem('%02d' % i, self.list) item.setSizeHint(QSize(200, 30)) item._coltab_index = i #item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) lab = QLabel(parent=None) lab.setPixmap(ct.get_pixmap(i, size=(200, 30))) self.list.setItemWidget(item, lab) item = QListWidgetItem('cancel', self.list) self.list.setItemWidget(item, self.but_cancel) def onItemClick(self, item): self.ctab_selected = item._coltab_index self.accept() #class QWPopupSelectColorBarV0(QDialog) : def __init__V0(self, parent=None): QDialog.__init__(self, parent) self.ctab_selected = None #self.list = QListWidget(parent) #self.fill_list(lst) #self.fill_list_icons(lst_icons) # Confirmation buttons self.but_cancel = QPushButton('&Cancel') #self.but_apply = QPushButton('&Apply') #self.but_create = QPushButton('&Create') #cp.setIcons() #self.but_cancel.setIcon(cp.icon_button_cancel) #self.but_apply .setIcon(cp.icon_button_ok) #self.connect(self.but_cancel, QtCore.SIGNAL('clicked()'), self.onCancel) #self.connect(self.but_apply, QtCore.SIGNAL('clicked()'), self.onApply) #self.hbox = QVBoxLayout() #self.hbox.addWidget(self.but_cancel) #self.hbox.addWidget(self.but_apply) ##self.hbox.addStretch(1) vbox = QVBoxLayout() for i in range(1, 9): lab = QLabel(parent=None) lab.setPixmap(ct.get_pixmap(i, size=(200, 30))) #lab.setText('%02d'%i) # set text !!!OR!!! pixmam #lab.setContentsMargins(QMargins(-5,-5,-5,-5)) #lab.setFixedSize(200,10) lab._coltab_index = i vbox.addWidget(lab) vbox.addStretch() vbox.addWidget(self.but_cancel) self.setLayout(vbox) self.connect(self.but_cancel, QtCore.SIGNAL('clicked()'), self.onCancel) self.showToolTips() self.setStyle() def setStyle(self): self.setWindowTitle('Select') self.setFixedWidth(215) lst_len = self.list.__len__() self.setMinimumHeight(30 * lst_len + 10) #self.setMaximumWidth(600) #self.setStyleSheet(style.styleBkgd) self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint) self.setContentsMargins(-9, -9, -9, -9) #self.setStyleSheet(style.styleBkgd) #self.but_create.setStyleSheet(style.styleButton) #self.but_apply.setStyleSheet(style.styleButton) self.but_cancel.setStyleSheet(style.styleButton) self.but_cancel.setFixedSize(200, 30) self.move(QCursor.pos().__add__(QPoint(-110, -50))) def showToolTips(self): #self.but_apply.setToolTip('Apply selection') #self.but_cancel.setToolTip('Cancel selection') self.setToolTip('Select color table') def mousePressEvent(self, e): logger.debug('mousePressEvent') child = self.childAt(e.pos()) if isinstance(child, QLabel): logger.debug('Selected color table index: %d' % child._coltab_index) self.ctab_selected = child._coltab_index self.accept() def event(self, e): #logger.debug('event.type %s' % e.type()) if e.type() == QEvent.WindowDeactivate: self.reject() return QDialog.event(self, e) def closeEvent(self, e): logger.debug('closeEvent') self.reject() def selectedColorTable(self): return self.ctab_selected def onCancel(self): logger.debug('onCancel', __name__) self.reject()
class QWPopupSelectColorBar(QDialog): def __init__(self, parent=None): QDialog.__init__(self, parent) self.but_cancel = QPushButton('&Cancel') self.ctab_selected = None self.list = QListWidget(parent) self.fill_list() vbox = QVBoxLayout() vbox.addWidget(self.list) self.setLayout(vbox) self.but_cancel.clicked.connect(self.onCancel) self.list.itemClicked.connect(self.onItemClick) self.set_tool_tips() self.set_style() def fill_list(self): for i in range(1, 9): item = QListWidgetItem('%02d' % i, self.list) item.setSizeHint(QSize(200, 30)) item._coltab_index = i #item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) lab = QLabel(parent=None) lab.setPixmap(ct.get_pixmap(i, size=(200, 30))) self.list.setItemWidget(item, lab) item = QListWidgetItem('cancel', self.list) self.list.setItemWidget(item, self.but_cancel) def onItemClick(self, item): self.ctab_selected = item._coltab_index logger.debug('onItemClick ctab_selected: %s' % str(self.ctab_selected)) self.accept() def set_style(self): self.setWindowTitle('Select') self.setFixedWidth(215) lst_len = self.list.__len__() self.setMinimumHeight(30 * lst_len + 10) self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint) self.layout().setContentsMargins(0, 0, 0, 0) self.but_cancel.setStyleSheet(style.styleButton) self.but_cancel.setFixedSize(200, 30) self.move(QCursor.pos().__add__(QPoint(-110, -50))) def set_tool_tips(self): self.setToolTip('Select color table') def mousePressEvent(self, e): logger.debug('mousePressEvent') child = self.childAt(e.pos()) if isinstance(child, QLabel): logger.debug('Selected color table index: %d' % child._coltab_index) self.ctab_selected = child._coltab_index self.accept() def event(self, e): #logger.debug('event.type %s' % e.type()) if e.type() == QEvent.WindowDeactivate: self.reject() return QDialog.event(self, e) def closeEvent(self, e): logger.debug('closeEvent') self.reject() def selectedColorTable(self): return self.ctab_selected def onCancel(self): logger.debug('onCancel') self.reject()