Ejemplo n.º 1
0
class MoviePlayer(QMainWindow):
    def __init__(self, *args):
        QMainWindow.__init__(self, *args)
        # setGeometry(x_pos, y_pos, width, height)
        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle("QMovie to show animated gif")

        # set up the movie screen on a label

        self.movie_screen = QLabel()
        # expand and center the label
        self.movie_screen.setSizePolicy(QSizePolicy.Expanding,
                                        QSizePolicy.Expanding)

        #btn_start = QPushButton("Start Animation", self)
        # btn_start.clicked.connect(self.start)

        btn_stop = QPushButton("Stop Animation", self)
        btn_stop.clicked.connect(self.stop)

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.movie_screen)
        # main_layout.addWidget(btn_start)
        main_layout.addWidget(btn_stop)
        self.setLayout(main_layout)

        # use an animated gif file you have in the working folder
        # or give the full file path
        self.movie = QMovie("./AG_Dog.gif", QByteArray(), self)
        self.movie.setCacheMode(QMovie.CacheAll)
        self.movie.setSpeed(100)
        self.movie_screen.setMovie(self.movie)
        self.movie.start()

    def start(self):
        """sart animnation"""
        self.movie.start()

    def stop(self):
        """stop the animation"""
        self.movie.stop()
        print(self.movie.fileName())
        self.movie.start()
Ejemplo n.º 2
0
 def show_slides(self):
     try:
         i, img_object = self._result.get(True, 5)
         if isinstance(img_object, QMediaContent):
             self.MediaPlayer.setMedia(img_object)
     except Empty:
         self.timer.stop()
         return
     while i != self._next:
         self._result.put((i, img_object), False)
         i, img_object = self._result.get()
         if isinstance(img_object, QMediaContent):
             self.MediaPlayer.setMedia(img_object)
     if isinstance(img_object, QMediaContent):
         # If a movie
         # self.MediaPlayer.setMedia(img_object)
         self.layout.setCurrentWidget(self.VideoWidget)
         self.MediaPlayer.play()
     elif isinstance(img_object, QMovie):
         # If a gif
         size = img_object.scaledSize()
         img_object = QMovie(img_object.fileName())
         img_object.setCacheMode(QMovie.CacheAll)
         self._gif = img_object
         img_object.frameChanged.connect(self.gif_frame_changed)
         self.SlideShowWidget.setMovie(img_object)
         size.scale(self.SlideShowWidget.size(), Qt.KeepAspectRatio)
         img_object.setScaledSize(size)
         img_object.setSpeed(int(self.rate * 100))
         self.layout.setCurrentWidget(self.SlideShowWidget)
         # self.change_playspeed(self.rate)
         img_object.start()
     else:
         # If a picture
         # print(img_object.size())
         self.SlideShowWidget.setPixmap(
             img_object.scaled(self.SlideShowWidget.size(),
                               Qt.KeepAspectRatio))
         self.timer.start(self.delay / self.rate)
         self.layout.setCurrentWidget(self.SlideShowWidget)
     self._next += 1
     self.threading(self.maxqsize - self._result.qsize())
Ejemplo n.º 3
0
class Demo3(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        self.setWindowTitle('show_gif')
        self.setWindowIcon(QIcon('image/Capture_64px.png'))
        self.setWindowFlags(self.windowFlags() | Qt.WindowMinMaxButtonsHint)
        # self.resize(400,400)
        self.setFixedSize(800, 600)
        mainl = QVBoxLayout(self)
        self.labelShow = QLabel()
        self.labelShow.setContentsMargins(0, 0, 0, 0)
        pat = self.labelShow.palette()
        pat.setBrush(QPalette.Background, Qt.darkGray)
        self.labelShow.setAutoFillBackground(True)
        self.labelShow.setPalette(pat)
        self.labelShow.setAlignment(Qt.AlignCenter)
        # self.labelShow.setScaledContents(True)
        mainl.addWidget(self.labelShow, 1)
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        mainl.addWidget(line)
        btnLay = QHBoxLayout()

        frmLay = QFormLayout()
        self._spinBox = QSpinBox()
        frmLay.addRow('跳转:', self._spinBox)
        btnGo = QPushButton('Go', self)

        btnPrev = QPushButton('上一张', self)
        self.btnNext = QPushButton('下一张', self)
        btnPrev.clicked.connect(self.on_prev)
        self.btnNext.clicked.connect(self.on_next)
        btnGo.clicked.connect(lambda: self.flashMovie(self._spinBox.value()))
        self._spinBox.valueChanged.connect(lambda n: self.flashMovie(n))
        btnLay.addStretch()
        btnLay.addLayout(frmLay)
        btnLay.addWidget(btnGo)
        btnLay.addWidget(btnPrev)
        btnLay.addWidget(self.btnNext)
        btnLay.addStretch()
        mainl.addLayout(btnLay)

        labLay = QHBoxLayout()
        labLay.setSpacing(10)
        self._label = QLabel()
        frm1 = QFormLayout()
        frm1.addRow('共:', self._label)
        frm1.setRowWrapPolicy(QFormLayout.WrapLongRows)
        labLay.addStretch()
        labLay.addLayout(frm1)
        frm1 = QFormLayout()
        self._labInfo = QLabel()
        # self._labInfo.setWordWrap(True)
        frm1.addRow('当前:', self._labInfo)
        # frm1.setFieldGrowthPolicy(QFormLayout.ExpandingFieldsGrow)
        frm1.setRowWrapPolicy(QFormLayout.WrapLongRows)
        labLay.addLayout(frm1)
        frm1 = QFormLayout()
        self._labPlay = QLabel()
        frm1.addRow('播放帧号:', self._labPlay)
        labLay.addLayout(frm1)
        frm1.setRowWrapPolicy(QFormLayout.WrapLongRows)

        labLay.addStretch()
        labLay.setSpacing(10)
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        mainl.addWidget(line)
        mainl.addLayout(labLay)
        self._gifs = []
        self._movie = QMovie()
        self.labelShow.setMovie(self._movie)
        QTimer.singleShot(0, self.on_firstShow)
        self._picIndex = 0
        self._movie.frameChanged.connect(self.on_frameChange)
        # self._movie.finished.connect(lambda:self.btnNext.clicked.emit())

    def on_frameChange(self, n):
        self._labPlay.setText(' {} 帧'.format(n))
        if n + 1 == self._movie.frameCount():
            self.btnNext.clicked.emit()

    def on_firstShow(self):
        dir = r'E:\jiandanspider\pic'
        for i in os.listdir(dir):
            # print(os.path.isfile(i),i.lower(),i.lower().endswith('gif'))
            fullPath = os.path.join(dir, i)
            if os.path.isfile(fullPath) and i.lower().endswith('gif'):
                self._gifs.append(fullPath)

        self._spinBox.setMaximum(len(self._gifs))
        self._label.setText('%03d条记录' % len(self._gifs))
        if len(self._gifs) > 0:
            self._movie.setFileName(self._gifs[0])
            self._movie.start()
            self._labInfo.setText('{},{}帧\n{}'.format(
                os.path.split(self._movie.fileName())[1],
                self._movie.frameCount(), self._movie.frameRect()))

    def flashMovie(self, index):

        if index >= len(self._gifs):
            return
        self._movie.stop()
        self._movie.setFileName(self._gifs[index])
        self._movie.start()

        self._spinBox.valueChanged.disconnect()
        self._spinBox.setValue(index)
        self._labInfo.setText('{},{}帧\n{}'.format(
            os.path.split(self._movie.fileName())[1], self._movie.frameCount(),
            self._movie.frameRect()))
        self._spinBox.valueChanged.connect(lambda n: self.flashMovie(n))
        self._picIndex = index

    def on_next(self):
        self._picIndex += 1
        if self._picIndex >= len(self._gifs):
            self._picIndex = len(self._gifs) - 1
        self.flashMovie(self._picIndex)

    def on_prev(self):
        self._picIndex -= 1
        if self._picIndex < 0:
            self._picIndex = 0
        self.flashMovie(self._picIndex)