Example #1
0
    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()
Example #2
0
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()
Example #3
0
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()
Example #4
0
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()