Exemple #1
0
    def _load(self, path: str, keep_zoom: bool):
        """Load proper displayable QWidget for a path.

        This reads the image using QImageReader and then emits the appropriate
        *_loaded signal to tell the image to display a new object.
        """
        try:
            reader = imagereader.get_reader(path)
        except ValueError as e:
            log.error(str(e))
            return
        # SVG
        if reader.is_vectorgraphic and QtSvg is not None:
            # Do not store image and only emit with the path as the
            # VectorGraphic widget needs the path in the constructor
            api.signals.svg_loaded.emit(path, keep_zoom)
            self._edit_handler.clear()
        # Gif
        elif reader.is_animation:
            movie = QMovie(path)
            if not movie.isValid() or movie.frameCount() == 0:
                log.error("Error reading animation %s: invalid data", path)
                return
            api.signals.movie_loaded.emit(movie, keep_zoom)
            self._edit_handler.clear()
        # Regular image
        else:
            try:
                pixmap = reader.get_pixmap()
            except ValueError as e:
                log.error("%s", e)
                return
            self._edit_handler.pixmap = pixmap
            api.signals.pixmap_loaded.emit(pixmap, keep_zoom)
        self._path = path
Exemple #2
0
    def wxfinished(self):
        if self.wxreply.error() != QNetworkReply.NoError:
            print ("get radar error " + self.myname + ":" + \
                str(self.wxreply.error()))
            self.lastwx = 0
            return
        print("radar map received:" + self.myname + ":" + time.ctime())
        self.wxmovie.stop()
        self.wxdata = QtCore.QByteArray(self.wxreply.readAll())
        self.wxbuff = QtCore.QBuffer(self.wxdata)
        self.wxbuff.open(QtCore.QIODevice.ReadOnly)
        mov = QMovie(self.wxbuff, 'GIF')
        print ("radar map frame count:" + self.myname + ":" + \
            str(mov.frameCount()) + ":r" + str(self.retries))
        if mov.frameCount() > 2:
            self.lastwx = time.time()
            self.retries = 0
        else:
            # radar image retreval failed
            if self.retries > 3:
                # give up, last successful animation stays.
                # the next normal radar_refresh time (default 10min) will apply
                self.lastwx = time.time()
                return

            self.lastwx = 0
            # count retries
            self.retries = self.retries + 1
            # retry in 5 seconds
            QtCore.QTimer.singleShot(5 * 1000, self.getwx)
            return
        self.wxmovie = mov
        if self.satellite:
            self.setMovie(self.wxmovie)
        else:
            self.wwx.setMovie(self.wxmovie)
        if self.parent().isVisible():
            self.wxmovie.start()
Exemple #3
0
    def _load(self, path: str, reload_only: bool):
        """Load proper displayable QWidget for a path.

        This reads the image using QImageReader and then emits the appropriate
        *_loaded signal to tell the image to display a new object.
        """
        # Pass file format explicitly as imghdr does a much better job at this than the
        # file name based approach of QImageReader
        file_format = files.imghdr.what(path)
        if file_format is None:
            log.error("%s is not a valid image", path)
            return
        reader = QImageReader(path, file_format.encode("utf-8"))
        reader.setAutoTransform(True)  # Automatically apply exif orientation
        if not reader.canRead():
            log.error("Cannot read image %s", path)
            return
        # SVG
        if file_format == "svg" and QSvgWidget:
            # Do not store image and only emit with the path as the
            # VectorGraphic widget needs the path in the constructor
            self.original = None
            api.signals.svg_loaded.emit(path, reload_only)
            self._image_type = ImageType.Svg
        # Gif
        elif reader.supportsAnimation():
            movie = QMovie(path)
            if not movie.isValid() or movie.frameCount() == 0:
                log.error("Error reading animation %s: invalid data", path)
                return
            self.original = movie
            api.signals.movie_loaded.emit(self.current, reload_only)
            self._image_type = ImageType.Movie
        # Regular image
        else:
            pixmap = QPixmap.fromImageReader(reader)
            if reader.error():
                log.error("Error reading image %s: %s", path, reader.errorString())
                return
            self.original = pixmap
            api.signals.pixmap_loaded.emit(self.current, reload_only)
            self._image_type = ImageType.Pixmap
        self._path = path
Exemple #4
0
class Load(QWidget):
    def __init__(self):
        super().__init__()
        self.movie = QMovie("load.gif", QByteArray(), self)
        size = self.size()
        screenGeometry = QDesktopWidget().screenGeometry(-1).size()
        self.setGeometry((screenGeometry.width() - size.width()) // 2,
                         (screenGeometry.height() - size.height()) // 2,
                         size.width(), size.height())
        self.setWindowTitle('')
        self.movie_screen = QLabel()
        self.movie_screen.setSizePolicy(QSizePolicy.Expanding,
                                        QSizePolicy.Expanding)
        self.movie_screen.setAlignment(Qt.AlignCenter)
        main_layout = QVBoxLayout()
        main_layout.addWidget(self.movie_screen)
        self.setLayout(main_layout)
        self.movie.setCacheMode(QMovie.CacheAll)
        self.movie_screen.setMovie(self.movie)
        self.frame_count = self.movie.frameCount()
        self.movie.frameChanged.connect(self.frameChanged)
        self.frame = 0
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_NoSystemBackground, True)
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.movie.start()
        self.app = MainApp()
        self.movie.loopCount()

    def frameChanged(self):
        self.frame += 1
        if self.frame >= self.frame_count:
            self.movie.stop()
            self.movie.setParent(None)
            self.movie.deleteLater()
            self.setAttribute(Qt.WA_NoSystemBackground, False)
            self.setAttribute(Qt.WA_TranslucentBackground, False)
            self.destroy()
            self.app.show()
class MoviePlayer(QWidget):
    def __init__(self, parent=None):
        super(MoviePlayer, self).__init__(parent)

        self.movie = QMovie(self)
        self.movie.setCacheMode(QMovie.CacheAll)

        self.movieLabel = QLabel("No movie loaded")
        self.movieLabel.setAlignment(Qt.AlignCenter)
        self.movieLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        self.movieLabel.setBackgroundRole(QPalette.Dark)
        self.movieLabel.setAutoFillBackground(True)

        self.currentMovieDirectory = ''

        self.createControls()
        self.createButtons()

        self.movie.frameChanged.connect(self.updateFrameSlider)
        self.movie.stateChanged.connect(self.updateButtons)
        self.fitCheckBox.clicked.connect(self.fitToWindow)
        self.frameSlider.valueChanged.connect(self.goToFrame)
        self.speedSpinBox.valueChanged.connect(self.movie.setSpeed)

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(self.movieLabel)
        mainLayout.addLayout(self.controlsLayout)
        mainLayout.addLayout(self.buttonsLayout)
        self.setLayout(mainLayout)

        self.updateFrameSlider()
        self.updateButtons()

        self.setWindowTitle("Movie Player")
        self.resize(400, 400)

    def open(self):
        fileName, _ = QFileDialog.getOpenFileName(self, "Open a Movie",
                                                  self.currentMovieDirectory)

        if fileName:
            self.openFile(fileName)

    def openFile(self, fileName):
        self.currentMovieDirectory = QFileInfo(fileName).path()

        self.movie.stop()
        self.movieLabel.setMovie(self.movie)
        self.movie.setFileName(fileName)
        self.movie.start()

        self.updateFrameSlider()
        self.updateButtons()

    def goToFrame(self, frame):
        self.movie.jumpToFrame(frame)

    def fitToWindow(self):
        self.movieLabel.setScaledContents(self.fitCheckBox.isChecked())

    def updateFrameSlider(self):
        hasFrames = (self.movie.currentFrameNumber() >= 0)

        if hasFrames:
            if self.movie.frameCount() > 0:
                self.frameSlider.setMaximum(self.movie.frameCount() - 1)
            elif self.movie.currentFrameNumber() > self.frameSlider.maximum():
                self.frameSlider.setMaximum(self.movie.currentFrameNumber())

            self.frameSlider.setValue(self.movie.currentFrameNumber())
        else:
            self.frameSlider.setMaximum(0)

        self.frameLabel.setEnabled(hasFrames)
        self.frameSlider.setEnabled(hasFrames)

    def updateButtons(self):
        state = self.movie.state()

        self.playButton.setEnabled(self.movie.isValid()
                                   and self.movie.frameCount() != 1
                                   and state == QMovie.NotRunning)
        self.pauseButton.setEnabled(state != QMovie.NotRunning)
        self.pauseButton.setChecked(state == QMovie.Paused)
        self.stopButton.setEnabled(state != QMovie.NotRunning)

    def createControls(self):
        self.fitCheckBox = QCheckBox("Fit to Window")

        self.frameLabel = QLabel("Current frame:")

        self.frameSlider = QSlider(Qt.Horizontal)
        self.frameSlider.setTickPosition(QSlider.TicksBelow)
        self.frameSlider.setTickInterval(10)

        speedLabel = QLabel("Speed:")

        self.speedSpinBox = QSpinBox()
        self.speedSpinBox.setRange(1, 9999)
        self.speedSpinBox.setValue(100)
        self.speedSpinBox.setSuffix("%")

        self.controlsLayout = QGridLayout()
        self.controlsLayout.addWidget(self.fitCheckBox, 0, 0, 1, 2)
        self.controlsLayout.addWidget(self.frameLabel, 1, 0)
        self.controlsLayout.addWidget(self.frameSlider, 1, 1, 1, 2)
        self.controlsLayout.addWidget(speedLabel, 2, 0)
        self.controlsLayout.addWidget(self.speedSpinBox, 2, 1)

    def createButtons(self):
        iconSize = QSize(36, 36)

        openButton = QToolButton()
        openButton.setIcon(self.style().standardIcon(
            QStyle.SP_DialogOpenButton))
        openButton.setIconSize(iconSize)
        openButton.setToolTip("Open File")
        openButton.clicked.connect(self.open)

        self.playButton = QToolButton()
        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playButton.setIconSize(iconSize)
        self.playButton.setToolTip("Play")
        self.playButton.clicked.connect(self.movie.start)

        self.pauseButton = QToolButton()
        self.pauseButton.setCheckable(True)
        self.pauseButton.setIcon(self.style().standardIcon(
            QStyle.SP_MediaPause))
        self.pauseButton.setIconSize(iconSize)
        self.pauseButton.setToolTip("Pause")
        self.pauseButton.clicked.connect(self.movie.setPaused)

        self.stopButton = QToolButton()
        self.stopButton.setIcon(self.style().standardIcon(QStyle.SP_MediaStop))
        self.stopButton.setIconSize(iconSize)
        self.stopButton.setToolTip("Stop")
        self.stopButton.clicked.connect(self.movie.stop)

        quitButton = QToolButton()
        quitButton.setIcon(self.style().standardIcon(
            QStyle.SP_DialogCloseButton))
        quitButton.setIconSize(iconSize)
        quitButton.setToolTip("Quit")
        quitButton.clicked.connect(self.close)

        self.buttonsLayout = QHBoxLayout()
        self.buttonsLayout.addStretch()
        self.buttonsLayout.addWidget(openButton)
        self.buttonsLayout.addWidget(self.playButton)
        self.buttonsLayout.addWidget(self.pauseButton)
        self.buttonsLayout.addWidget(self.stopButton)
        self.buttonsLayout.addWidget(quitButton)
        self.buttonsLayout.addStretch()
Exemple #6
0
class Benek(Postac):
    def __init__(self, layout, move_distance=100, *args):
        super().__init__(layout, *args)
        self.clocks = []

        self.load_player_config()

        self.set_player_geo()
        self.setText("")
        self.setPixmap(QtGui.QPixmap("images/skins/" + JsonConnector.get_from_config("skin") + ".png"))
        self.setScaledContents(True)        # odpowiada za pozwolenie na skalowanie grafik

        self.move_distance = self.okno.gWidth / move_distance
        self.can_shot = True

        self.playing_sound = False

        self.rtimer = QTimer()
        self.clocks.append(self.rtimer)
        self.rtimer.timeout.connect(self.ruch_prawo)
        self.ltimer = QTimer()
        self.clocks.append(self.ltimer)
        self.ltimer.timeout.connect(self.ruch_lewo)

        self.shot_block_timer = QTimer()
        self.clocks.append(self.shot_block_timer)
        self.shot_block_timer.timeout.connect(self.shot_accuracy_unblock)

        self.make_move_animations()
        self.make_reload_bar()

    def load_player_config(self):
        config = JsonConnector.get_from_config("shipConfig")
        self.laser_penetrate = config["penetrate"]
        self.ship_size = config["shipSize"]
        self.fire_speed = config["fireSpeed"]
        self.ammo_size = config["ammoSize"]
        self.ammo_dist = config["ammoSpeed"]

    def set_player_geo(self):
        size = int(self.okno.gWidth/self.ship_size)
        self.setGeometry(QtCore.QRect((self.okno.width() - size)/2, self.okno.height() - size, size, size))

    def rusz_benek_prawo(self):
        self.rtimer.start(15)
        self.pg = int((self.okno.width() - self.okno.gWidth) / 2 + self.okno.gWidth)    # prawa granica
        self.x_ = self.geometry().x()

        self.move_sound_start()
        self.expand_anim_movie(self.lmove_anim)

    def ruch_prawo(self):
        if self.pg >= (self.x_ + self.width()):     # zapezpiecza postać przed wyjściem poza okno
            if (self.pg - (self.x_ + self.width())) < self.move_distance:   # jeśli odległość od lewego krańca jest mniejsza od ruchu to zmienia pozycje benka na krańcową
                self.x_ = self.pg - self.width()
            else:
                self.x_ += self.move_distance
            geo = QtCore.QRect(self.x_, self.geometry().y(), self.geometry().width(), self.geometry().height())
            self.setGeometry(geo)

    def stop_rusz_benek_prawo(self):
        self.rtimer.stop()
        self.move_sound_stop()
        self.collapse_anim_movie(self.lmove_anim)

    def rusz_benek_lewo(self):
        self.ltimer.start(15)
        self.x_ = self.geometry().x()
        self.lg = int((self.okno.width() - self.okno.gWidth) / 2) # lewa granica

        self.move_sound_start()
        self.expand_anim_movie(self.rmove_anim)

    def ruch_lewo(self):
        if self.x_ > self.lg:           # zabezpiecza przed wyjściem benka poza ekran
            if self.x_ - self.lg < self.move_distance:      # jeśli benkowi brakuje mniej niż dystans ruchu to przyjmuje zerową pozycje
                self.x_ = self.lg
            else:
                self.x_ -= self.move_distance
            geo = QtCore.QRect(self.x_, self.geometry().y(), self.geometry().width(), self.geometry().height())
            self.setGeometry(geo)

    def stop_rusz_benek_lewo(self):
        self.ltimer.stop()
        self.move_sound_stop()
        self.collapse_anim_movie(self.rmove_anim)

    def shot(self):     # tworzy nowy strzał
        if self.can_shot:
            x = SoundThread("shotLaser.wav")
            x.start()

            self.ui.centralwidget.close()
            x = PlayerLaser(self.ui.centralwidget, cause_geo=self.geometry(), can_penetrate=self.laser_penetrate, bullet_width=self.ammo_size[0], bullet_height=self.ammo_size[1], bullet_distance=self.ammo_dist)       # aby poprawnie dodać element do główneg widgetu należy go wyłączyć a następnie pokazać, czli zresetować
            self.ui.centralwidget.show()
            self.shot_accuracy_block()

    def shot_accuracy_block(self):
        self.can_shot = False
        self.shot_block_timer.start(self.fire_speed)

        self.movie.start()

    def shot_accuracy_unblock(self):
        self.can_shot = True
        self.shot_block_timer.stop()

        self.movie.stop()
        self.movie.jumpToFrame(self.movie.frameCount()-1)

    def move_sound_start(self):
        if not self.playing_sound:
            self.playing_sound = True
            self.move_sound = SoundThread("shotEngineNoise.wav", loop=True)
            self.clocks.append(self.move_sound)
            self.move_sound.start()

    def move_sound_stop(self):
        if self.playing_sound and not (self.ltimer.isActive() or self.rtimer.isActive()):
            self.move_sound.stop()
            self.clocks.remove(self.move_sound)
            self.playing_sound = False

    def make_reload_bar(self):
        self.reload_bar = QLabel(self)
        self.reload_bar.setGeometry(QtCore.QRect(int(self.width()/6), 0, int(self.width()/6), int(self.height()/2)))
        self.reload_bar.setText("aa")
        self.reload_bar.setPixmap(QtGui.QPixmap("images/reloadBar.gif"))
        self.reload_bar.setScaledContents(True)

        self.movie = QMovie("images/reloadBar.gif", QByteArray(), self.reload_bar)
        self.movie.setCacheMode(QMovie.CacheAll)
        self.movie.setSpeed(100 * 1000 / self.fire_speed)   # ustala tak prędkość aby pokrywała się z szybkostrzelnością
        self.reload_bar.setMovie(self.movie)
        self.movie.jumpToFrame(self.movie.frameCount()-1)

    def make_move_animations(self):
        self.lmove_lab = QLabel(self)
        self.lmove_lab.setText("")
        self.lmove_lab.setGeometry(QtCore.QRect(0, 0, int(self.width() / 3), self.height()))
        self.lmove_lab.setScaledContents(True)

        self.lmove_anim = QMovie("images/lPlayerMove.gif", QByteArray(), self.lmove_lab)
        self.lmove_anim.setCacheMode(QMovie.CacheAll)
        self.lmove_anim.setSpeed(7000)
        self.lmove_lab.setMovie(self.lmove_anim)
        self.lmove_anim.jumpToFrame(0)

        self.rmove_lab = QLabel(self)
        self.rmove_lab.setText("")
        self.rmove_lab.setGeometry(QtCore.QRect(int(self.width() / 3*2), 0, int(self.width() / 3), self.height()))
        self.rmove_lab.setScaledContents(True)

        self.rmove_anim = QMovie("images/rPlayerMove.gif", QByteArray(), self.rmove_lab)
        self.rmove_anim.setCacheMode(QMovie.CacheAll)
        self.rmove_anim.setSpeed(7000)
        self.rmove_lab.setMovie(self.rmove_anim)
        self.rmove_anim.jumpToFrame(0)
        self.rmove_anim.frameCount()

    def expand_anim_movie(self, movie):
        movie.jumpToFrame(int(movie.frameCount() / 2))

    def collapse_anim_movie(self, movie):
        movie.jumpToFrame(0)
Exemple #7
0
class MainWindow(QMainWindow, Ui_GrilHappyQMW):


    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.setupUi(self)
        self.setWindowTitle('Grils HappyToo!!!')
        self.setVisible(0)
        self.preloadDialog = QDialog()
        self.screen = QDesktopWidget().screenGeometry()

        """
        gif开场动画
        """
        self.movie=QMovie(":/girl/img/showheart.gif")

        self.movie.updated.connect(self.gifFinished)
        self.movie.destroyed.connect(self.showMainWindow)
        self.movie.setSpeed(1111)
        """
        开场dialog
        """


        self.preloadDialog.setWindowFlag(Qt.FramelessWindowHint)
        self.preloadDialog.setMask(QRegion(12,12,190,190))
        self.preloadDialog.move(( self.screen.width()-200) / 2, ( self.screen.height()-200) / 2)
        gifLayout=QHBoxLayout()
        gifLabel=QLabel()

        gifLabel.setMovie(self.movie)
        gifLayout.addWidget(gifLabel)

        self.preloadDialog.setLayout(gifLayout)


        self.preloadDialog.setVisible(1)
        self.movie.start()
    def showMainWindow(self):
        self.move((self.screen.width() - self.width()) / 2, (self.screen.height() - self.height()) / 2)
        self.meidaPlayer=QMediaPlayer()

        self.playlist=QMediaPlaylist()
        self.playlist.setCurrentIndex(1);
        self.playlist.addMedia(QMediaContent(QUrl().fromLocalFile("video/Radio-Digital-Scheme-Live-Wallpaper~1.mp4")))
        self.playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
        self.meidaPlayer.setPlaylist(self.playlist)

        videoWidget = QVideoWidget()

        videoWidget.setAspectRatioMode(Qt.IgnoreAspectRatio)
        videoWidget.setAutoFillBackground(True)
        videoWidget.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding))
        # videoWidget.setMinimumSize(videoWidget.size())

        self.meidaPlayer.setVideoOutput(videoWidget)

        self.verticalLayout_2.insertWidget(0,videoWidget)
        self.meidaPlayer.play()
        self.setVisible(1)


    def codeRain(self):

        label=QLabel(parent=self)
        s=''.join([word+'\n' for word in list("我们的每一天,都无法重来,将管理学书籍读遍依旧管不了因你悸动的心。")])
        label.setText(s)
        label.raise_()
        label.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding))
        label.setMaximumWidth(12)
        label.setMaximumHeight(len(s)*10)
        label.setMinimumHeight(len(s)*10)
        label.setWordWrap(True)
        label.setAlignment(Qt.AlignTop)
        label.setStyleSheet("""
        font: 87 10pt "Arial";
        color: rgb(0, 49, 79);
        """)
        label.setAttribute(Qt.WA_TranslucentBackground)
        label.show()
        ani=QPropertyAnimation(label, b'pos', self)

        ani.setDuration(10000)
        xr=random.randint(0,self.label.width())
        yr=random.randint(0,self.height())
        ani.setStartValue(QPoint(xr,-self.width()))
        ani.setEndValue(QPoint(xr,self.height()))
        ani.finished.connect(label.deleteLater)
        ani.start()




    def gifFinished(self):
        if(self.movie.currentFrameNumber()==self.movie.frameCount()-1):
            self.preloadDialog.close()
            self.movie.stop()
            self.showPreload()

    def showPreload(self):
        self.preloadDialog = QDialog()
        self.preloadImage=QPixmap(':/girl/img/preload.png')
        size = self.preloadImage.size()
        self.move(( self.screen.width() - size.width()) / 2, ( self.screen.height() - size.height()) / 2)
        self.preloadDialog.setMinimumSize(size)

        layout=QHBoxLayout()
        label=QLabel()
        label.setPixmap(self.preloadImage)

        layout.addWidget(label)

        self.preloadDialog.setLayout(layout)
        self.preloadDialog.setMask(QRegion(QRect(self.preloadImage.rect().x()+15,self.preloadImage.rect().y()+15,self.preloadImage.rect().width()-20,self.preloadImage.rect().height()-35)))

        self.timer = QTimer()
        self.preloadDialog.show()
        self.timer.timeout.connect(self.faded)
        self.timer.start(3000)
        self.timer.setInterval(10)
        self.opacity = 100

    def faded(self):
        self.preloadDialog.setWindowOpacity(self.opacity / 100)
        if self.opacity <= 0:

            self.preloadDialog.close()
            """
            开启代码雨
            """
            self.showMainWindow()
            self.codeTimer=QTimer()
            self.codeTimer.timeout.connect(self.codeRain)
            self.codeTimer.start(1000)
            self.codeTimer.setInterval(5000)
            self.timer.stop()
        else:
            self.opacity -= 13


    def closeEvent(self, a0) -> None:
        self.codeTimer.stop()
        for i in range(100,0,-1):
            self.setWindowOpacity(i/100)
            time.sleep(0.002)
Exemple #8
0
class MoviePlayer(QWidget):
    def __init__(self, parent=None):
        super(MoviePlayer, self).__init__(parent)

        self.movie = QMovie(self)
        self.movie.setCacheMode(QMovie.CacheAll)

        self.movieLabel = QLabel("No movie loaded")
        self.movieLabel.setAlignment(Qt.AlignCenter)
        self.movieLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        self.movieLabel.setBackgroundRole(QPalette.Dark)
        self.movieLabel.setAutoFillBackground(True)

        self.currentMovieDirectory = ''

        self.createControls()
        self.createButtons()

        self.movie.frameChanged.connect(self.updateFrameSlider)
        self.movie.stateChanged.connect(self.updateButtons)
        self.fitCheckBox.clicked.connect(self.fitToWindow)
        self.frameSlider.valueChanged.connect(self.goToFrame)
        self.speedSpinBox.valueChanged.connect(self.movie.setSpeed)

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(self.movieLabel)
        mainLayout.addLayout(self.controlsLayout)
        mainLayout.addLayout(self.buttonsLayout)
        self.setLayout(mainLayout)

        self.updateFrameSlider()
        self.updateButtons()

        self.setWindowTitle("Movie Player")
        self.resize(400, 400)

    def open(self):
        fileName, _ = QFileDialog.getOpenFileName(self, "Open a Movie",
                self.currentMovieDirectory)

        if fileName:
            self.openFile(fileName)

    def openFile(self, fileName):
        self.currentMovieDirectory = QFileInfo(fileName).path()

        self.movie.stop()
        self.movieLabel.setMovie(self.movie)
        self.movie.setFileName(fileName)
        self.movie.start()

        self.updateFrameSlider();
        self.updateButtons();

    def goToFrame(self, frame):
        self.movie.jumpToFrame(frame)

    def fitToWindow(self):
        self.movieLabel.setScaledContents(self.fitCheckBox.isChecked())

    def updateFrameSlider(self):
        hasFrames = (self.movie.currentFrameNumber() >= 0)

        if hasFrames:
            if self.movie.frameCount() > 0:
                self.frameSlider.setMaximum(self.movie.frameCount() - 1)
            elif self.movie.currentFrameNumber() > self.frameSlider.maximum():
                self.frameSlider.setMaximum(self.movie.currentFrameNumber())

            self.frameSlider.setValue(self.movie.currentFrameNumber())
        else:
            self.frameSlider.setMaximum(0)

        self.frameLabel.setEnabled(hasFrames)
        self.frameSlider.setEnabled(hasFrames)

    def updateButtons(self):
        state = self.movie.state()

        self.playButton.setEnabled(self.movie.isValid() and
                self.movie.frameCount() != 1 and state == QMovie.NotRunning)
        self.pauseButton.setEnabled(state != QMovie.NotRunning)
        self.pauseButton.setChecked(state == QMovie.Paused)
        self.stopButton.setEnabled(state != QMovie.NotRunning)

    def createControls(self):
        self.fitCheckBox = QCheckBox("Fit to Window")

        self.frameLabel = QLabel("Current frame:")

        self.frameSlider = QSlider(Qt.Horizontal)
        self.frameSlider.setTickPosition(QSlider.TicksBelow)
        self.frameSlider.setTickInterval(10)

        speedLabel = QLabel("Speed:")

        self.speedSpinBox = QSpinBox()
        self.speedSpinBox.setRange(1, 9999)
        self.speedSpinBox.setValue(100)
        self.speedSpinBox.setSuffix("%")

        self.controlsLayout = QGridLayout()
        self.controlsLayout.addWidget(self.fitCheckBox, 0, 0, 1, 2)
        self.controlsLayout.addWidget(self.frameLabel, 1, 0)
        self.controlsLayout.addWidget(self.frameSlider, 1, 1, 1, 2)
        self.controlsLayout.addWidget(speedLabel, 2, 0)
        self.controlsLayout.addWidget(self.speedSpinBox, 2, 1)

    def createButtons(self):
        iconSize = QSize(36, 36)

        openButton = QToolButton()
        openButton.setIcon(self.style().standardIcon(QStyle.SP_DialogOpenButton))
        openButton.setIconSize(iconSize)
        openButton.setToolTip("Open File")
        openButton.clicked.connect(self.open)

        self.playButton = QToolButton()
        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playButton.setIconSize(iconSize)
        self.playButton.setToolTip("Play")
        self.playButton.clicked.connect(self.movie.start)

        self.pauseButton = QToolButton()
        self.pauseButton.setCheckable(True)
        self.pauseButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPause))
        self.pauseButton.setIconSize(iconSize)
        self.pauseButton.setToolTip("Pause")
        self.pauseButton.clicked.connect(self.movie.setPaused)

        self.stopButton = QToolButton()
        self.stopButton.setIcon(self.style().standardIcon(QStyle.SP_MediaStop))
        self.stopButton.setIconSize(iconSize)
        self.stopButton.setToolTip("Stop")
        self.stopButton.clicked.connect(self.movie.stop)

        quitButton = QToolButton()
        quitButton.setIcon(self.style().standardIcon(QStyle.SP_DialogCloseButton))
        quitButton.setIconSize(iconSize)
        quitButton.setToolTip("Quit")
        quitButton.clicked.connect(self.close)

        self.buttonsLayout = QHBoxLayout()
        self.buttonsLayout.addStretch()
        self.buttonsLayout.addWidget(openButton)
        self.buttonsLayout.addWidget(self.playButton)
        self.buttonsLayout.addWidget(self.pauseButton)
        self.buttonsLayout.addWidget(self.stopButton)
        self.buttonsLayout.addWidget(quitButton)
        self.buttonsLayout.addStretch()
Exemple #9
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)
Exemple #10
0
class SlideshowMediaWindow(QDialog):
    def __init__(self, parent, area=None, *args, **kwargs):
        "parent: parent widget"
        "area: top-left-x(to screen), top-left-y(to screen), width, height"
        super(SlideshowMediaWindow, self).__init__(parent, *args, **kwargs)
        self.setWindowTitle("Slideshow External Media Window")
        sizePolicy = QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        self.setSizePolicy(sizePolicy)
        self.setAttribute(Qt.WA_DeleteOnClose, on=True)
        self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint)
        self.setSizeGripEnabled(True)

        self.layout = QVBoxLayout()
        self.media_container = QLabel(self)
        self.media_container.setAttribute(Qt.WA_NativeWindow, on=True)
        # self.media_container.setFrameShape(QFrame.NoFrame)
        sizePolicy = QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        sizePolicy.setHeightForWidth(
            self.media_container.sizePolicy().hasHeightForWidth())
        self.media_container.setSizePolicy(sizePolicy)
        self.media_container.setAlignment(Qt.AlignCenter)
        self.media_container.setStyleSheet("background-color: black;")

        self.layout.addWidget(self.media_container)
        self.layout.setContentsMargins(1, 1, 1, 1)
        self.setLayout(self.layout)
        self.area = area
        if any(area):
            self.resize(area[2], area[3])
            self.move(area[0], area[1])
        else:
            self.resize(400, 300)
        self.mouse_pos = [0, 0]
        self.allow_resize_mouse_press = False

        self.pic_image = None
        self.media_container.setScaledContents(False)
        self.media_container.original_resizeEvent = self.media_container.resizeEvent

        def media_container_resizeEvent(event):
            if self.pic_image and isinstance(self.pic_image, QPixmap):
                if self.pic_image.width() > self.media_container.width() - 2 \
                   and self.pic_image.height() > self.media_container.height() - 2:
                    target_width = self.media_container.width() - 2
                    target_height = self.media_container.height() - 2
                else:
                    target_width = self.pic_image.width()
                    target_height = self.pic_image.height()
                scaled_image = self.pic_image.scaled(
                    target_width,
                    target_height,
                    aspectRatioMode=Qt.KeepAspectRatio,
                    transformMode=Qt.FastTransformation)
                self.media_container.setPixmap(scaled_image)
            elif self.pic_image and isinstance(self.pic_image, QMovie):
                if self.pic_image.original_size.width() > self.media_container.width() - 2 \
                   and self.pic_image.original_size.height() > self.media_container.height() - 2:
                    target_width = self.media_container.width() - 2
                    target_height = self.media_container.height() - 2
                else:
                    target_width = self.pic_image.original_size.width()
                    target_height = self.pic_image.original_size.height()
                scaled_size = self.pic_image.original_size.scaled(
                    target_width, target_height, Qt.KeepAspectRatio)
                self.pic_image.setScaledSize(scaled_size)
            else:
                self.media_container.original_resizeEvent(event)

        self.media_container.resizeEvent = media_container_resizeEvent

        self.show()

        self.last_media_path = ""
        self.media_show_completed_notice = None
        # this should be a function to be called like self.stop_media_show()
        self.stop_media_show = lambda: None

        self.gif_completed_notice = threading.Event()

    def show_video(self, path):
        self.stop_media_show()
        self.media_container.clear()
        # some say the winId change all the time...so...
        mplayer_extended.setup(int(self.media_container.winId()))
        self.media_show_completed_notice = mplayer_extended.play(path)
        logger.debug("ext-media-win showed video: %s" % path)
        self.last_media_path = path
        self.stop_media_show = mplayer_extended.stop

    def show_pic(self, path):
        self.stop_media_show()
        self.media_container.clear()
        if not path.lower().endswith(".gif"):
            self.pic_image = QPixmap(path)
            if self.pic_image.width() > self.media_container.width() - 2 \
               and self.pic_image.height() > self.media_container.height() - 2:
                target_width = self.media_container.width() - 2
                target_height = self.media_container.height() - 2
            else:
                target_width = self.pic_image.width()
                target_height = self.pic_image.height()
            scaled_image = self.pic_image.scaled(
                target_width,
                target_height,
                aspectRatioMode=Qt.KeepAspectRatio,
                transformMode=Qt.SmoothTransformation)
            self.media_container.setPixmap(scaled_image)
            logger.debug("ext-media-win showed pic: %s" % path)
            self.stop_media_show = lambda: None
            self.media_show_completed_notice = None
        else:
            self.last_media_path = path
            self.pic_image = QMovie(path, QByteArray(), self)
            if not self.pic_image.isValid():
                self.media_show_completed_notice = None
                return
            self.pic_image.setCacheMode(QMovie.CacheAll)
            self.pic_image.jumpToNextFrame()
            self.pic_image.original_size = self.pic_image.currentPixmap().size(
            )
            if self.pic_image.original_size.width() > self.media_container.width() - 2 \
               and self.pic_image.original_size.height() > self.media_container.height() - 2:
                target_width = self.media_container.width() - 2
                target_height = self.media_container.height() - 2
            else:
                target_width = self.pic_image.original_size.width()
                target_height = self.pic_image.original_size.height()
            scaled_size = self.pic_image.original_size.scaled(
                target_width, target_height, Qt.KeepAspectRatio)
            self.pic_image.setScaledSize(scaled_size)
            self.pic_image.setSpeed(100)
            self.media_container.setMovie(self.pic_image)

            self.media_show_completed_notice = self.gif_completed_notice
            self.media_show_completed_notice.clear()

            def frameChanged_Handler(frameNumber):
                if frameNumber >= self.pic_image.frameCount() - 1:
                    self.pic_image.stop()
                    self.media_show_completed_notice.set()

            self.pic_image.frameChanged.connect(frameChanged_Handler)
            self.pic_image.start()
            logger.debug("ext-media-win showed gif: %s" % path)

            def stop_gif():
                try:
                    self.pic_image.stop()
                    self.media_show_completed_notice.set()
                except Exception:
                    pass

            self.stop_media_show = stop_gif

    def contextMenuEvent(self, event):
        m = QMenu(self)
        item = m.addAction("Stop Media")
        item.triggered.connect(self.stop_media_show)
        item = m.addAction("Exit Media Window")
        item.triggered.connect(self.close)
        m.popup(QCursor.pos())

    def mousePressEvent(self, event):
        self.mouse_pos[0] = event.x()
        self.mouse_pos[1] = event.y()
        if event.globalX() < self.x() + self.frameGeometry().width() - 20 \
           or event.globalY() < self.y() + self.frameGeometry().height() - 20:
            self.allow_resize_mouse_press = True
        else:
            self.allow_resize_mouse_press = True
        super().mousePressEvent(event)

    def mouseReleaseEvent(self, event):
        self.allow_resize_mouse_press = False
        super().mouseReleaseEvent(event)

    def mouseMoveEvent(self, event):
        if self.allow_resize_mouse_press:
            self.move(event.globalX() - self.mouse_pos[0],
                      event.globalY() - self.mouse_pos[1])
        super().mouseMoveEvent(event)

    def mouseDoubleClickEvent(self, event):
        self.setWindowState(self.windowState() ^ Qt.WindowFullScreen)
        super().mouseDoubleClickEvent(event)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_F11:
            self.setWindowState(self.windowState() ^ Qt.WindowFullScreen)
        else:
            super().keyPressEvent(event)

    def closeEvent(self, event):
        self.stop_media_show()
        self.area[0] = self.x()
        self.area[1] = self.y()
        self.area[2] = self.width()
        self.area[3] = self.height()
        event.accept()
Exemple #11
0
class GIFItem(BaseItem):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.gesture_id = self.item_spec['id']
        self.verbose_name = cn.GESTURES[self.gesture_id].verbose_name
        gif_path = cn.MODELS_FOLDER / f'{cn.GESTURES[self.gesture_id].slug}.gif'

        if not gif_path.exists():
            raise ValueError(f'Missing gif at {gif_path}.')

        self.width = self.item_spec.get(
            'width', cn.GIF_RECORDING_SIZE[0] * cn.GIF_DISPLAY_SIZE)
        self.height = self.item_spec.get(
            'height', cn.GIF_RECORDING_SIZE[1] * cn.GIF_DISPLAY_SIZE)

        self.movie = QMovie(gif_path.as_posix())
        self.gif_progress_bar = QProgressBar()

    def get_widget(self) -> Union[QWidget, None]:
        name_label = QLabel(self.verbose_name)
        name_label.setAlignment(Qt.AlignCenter)

        gif_label = QLabel()
        gif_label.setMovie(self.movie)
        self.movie.start()

        gif_label.setScaledContents(True)
        gif_label.setFixedSize(self.width, self.height)
        gif_label.setAlignment(Qt.AlignCenter)
        gif_label.setFrameStyle(QFrame.Panel)

        last_frame = self.movie.frameCount() - 1
        self.gif_progress_bar.setMaximum(last_frame)

        def update_animation_progress(frame_index):
            try:
                self.gif_progress_bar.setValue(frame_index)
                if frame_index == last_frame:
                    self.movie.setPaused(True)
                    QTimer.singleShot(1000,
                                      lambda: self.movie.setPaused(False))
            except RuntimeError:
                # This is a temporary fix, because the parent widget is deleted manually
                logger.debug('Gif Item Progress bar deleted before stopping.')
                self.movie.stop()

        self.movie.frameChanged.connect(update_animation_progress)
        GlobalEventFilter.get_instance().install_key_hook(
            Qt.Key_Space, self.replay_movie)

        layout = QVBoxLayout()
        layout.addWidget(name_label)
        layout.addWidget(gif_label)
        layout.addWidget(self.gif_progress_bar)
        layout.setSpacing(5)
        layout.setContentsMargins(0, 0, 0, 0)

        widget = QWidget()
        widget.setLayout(layout)
        widget.setFixedSize(self.width, self.height + 50)
        return widget

    def replay_movie(self, _, event: QEvent):
        key_event = QKeyEvent(event)
        if key_event.type(
        ) == QKeyEvent.KeyPress and not key_event.isAutoRepeat():
            self.movie.stop()
            self.movie.start()
            effect = QGraphicsDropShadowEffect()
            effect.setBlurRadius(20)
            effect.setXOffset(0)
            effect.setYOffset(0)
            effect.setColor(Qt.red)
            self.gif_progress_bar.setGraphicsEffect(effect)

        if key_event.type() == QKeyEvent.KeyRelease:
            self.gif_progress_bar.setGraphicsEffect(None)

    def finish(self):
        self.movie.stop()
        GlobalEventFilter.get_instance().remove_key_hook(
            Qt.Key_Space, self.replay_movie)
Exemple #12
0
class MainWindow(QMainWindow, Ui_GrilHappyQMW):
    """
    记录鼠标
    """
    mxPos1 = 0
    myPos1 = 0
    mxPos2 = 1
    myPos2 = 1
    r1 = 0
    g1 = 0
    b1 = 0
    r2 = 159
    g2 = 159
    b2 = 159
    myWheel = 255

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.setupUi(self)
        self.setWindowTitle('Grils HappyToo!!!')
        self.setVisible(0)
        self.preloadDialog = QDialog()
        self.screen = QDesktopWidget().screenGeometry()
        self.setMouseTracking(1)
        self.centralwidget.setMouseTracking(1)
        """
        gif开场动画
        """
        if PRELOAD:
            self.movie = QMovie(":/girl/img/showheart.gif")

            self.movie.updated.connect(self.gifFinished)
            self.movie.destroyed.connect(self.showMainWindow)
            self.movie.setSpeed(100)
            """
            开场dialog
            """
            self.preloadDialog.setWindowFlag(Qt.FramelessWindowHint)
            self.preloadDialog.move((self.screen.width() - 200) / 2,
                                    (self.screen.height() - 200) / 2)
            self.preloadDialog.setMinimumWidth(199)
            self.preloadDialog.setMinimumHeight(198)
            gifLayout = QHBoxLayout()
            gifLayout.setContentsMargins(0, 0, 0, 0)
            gifLayout.setSpacing(0)
            gifLabel = QLabel()

            gifLabel.setMovie(self.movie)
            gifLayout.addWidget(gifLabel)

            self.preloadDialog.setLayout(gifLayout)

            self.preloadDialog.setVisible(1)
            self.movie.start()
        else:
            self.showMainWindow()

    def showMainWindow(self):
        self.move((self.screen.width() - self.width()) / 2,
                  (self.screen.height() - self.height()) / 2)
        self.meidaPlayer = QMediaPlayer()

        self.playlist = QMediaPlaylist()
        self.playlist.setCurrentIndex(1)
        self.playlist.addMedia(
            QMediaContent(QUrl().fromLocalFile(
                "video/Radio-Digital-Scheme-Live-Wallpaper~1.mp4")))
        self.playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
        self.meidaPlayer.setPlaylist(self.playlist)

        videoWidget = QVideoWidget()

        videoWidget.setAspectRatioMode(Qt.IgnoreAspectRatio)
        videoWidget.setAutoFillBackground(True)
        videoWidget.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
        # videoWidget.setMinimumSize(videoWidget.size())
        self.meidaPlayer.setVideoOutput(videoWidget)
        self.videoLayout.insertWidget(0, videoWidget)
        self.meidaPlayer.play()

        # self.pushButton_4.clicked.connect(self.showColorDialog)
        self.pushButton_4.installEventFilter(self)
        # self.pushButton.setGeometry()
        self.setVisible(1)

    def eventFilter(self, a0, a1) -> bool:

        if a1.type() == QtCore.QEvent.MouseButtonPress:
            self.pushButton_4.setStyleSheet("""
            QPushButton#pushButton_4{
            border:1px solid #ffffff;
            border-radius:2px;
            padding:10px 36px;
            background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                      stop: 0 #dadbde, stop: 1 #f6f7fa);
            color: rgb(255, 255, 255);
}
            """)
            t = QTimer()
            t.timeout.connect(lambda: self.pushButton_4.setStyleSheet("""
                                QPushButton#pushButton_4{
                                border:1px solid #ffffff;
                                border-radius:2px;
                                padding:10px 36px;
                                background-color: rgba(255, 255, 255, 0);
                                color: rgb(255, 255, 255);
                    }
                                """))
            t.start(50)
            t.setSingleShot(1)
            self.showColorDialog()
            return 1
        else:
            return 0

    def showColorDialog(self):
        #QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString(), ColorDialogOptions options = ColorDialogOptions())
        self.r1, self.g1, self.b1, a = QColorDialog().getColor(
            QColor(0, 0, 0), self, "选择第一种渐变颜色",
            QColorDialog.ShowAlphaChannel).getRgb()
        self.r2, self.g2, self.b2, a = QColorDialog().getColor(
            QColor(255, 255, 255), self, "选择第二种渐变颜色",
            QColorDialog.ShowAlphaChannel).getRgb()
        self.centralwidget.setStyleSheet("""
        QWidget#centralwidget{background-color:qlineargradient(spread:pad, x1:%f, y1:%f, x2:%f, y2:%f, stop:0 rgba(%d, %d, %d, 255), stop:1 rgba(%d, %d, %d, %d));
        }""" % (self.mxPos1, self.myPos1, self.mxPos2, self.myPos2, self.r1,
                self.g1, self.b1, self.r2, self.g2, self.b2, self.myWheel))

    def wheelEvent(self, a0) -> None:
        angle = a0.angleDelta().y() / 8
        if self.myWheel < 255 and angle > 0:
            self.myWheel += 1
        elif self.myWheel > 0 and angle < 0:
            self.myWheel -= 1
        self.centralwidget.setStyleSheet("""
        QWidget#centralwidget{background-color:qlineargradient(spread:pad, x1:%f, y1:%f, x2:%f, y2:%f, stop:0 rgba(%d, %d, %d, 255), stop:1 rgba(%d, %d, %d, %d));
        }""" % (self.mxPos1, self.myPos1, self.mxPos2, self.myPos2, self.r1,
                self.g1, self.b1, self.r2, self.g2, self.b2, self.myWheel))

    def mousePressEvent(self, a0) -> None:
        """
        这里需要加上btn的..那个padding
        """
        if not self.pushButton.geometry().contains(a0.pos()):
            label = QLabel(parent=self)
            self.centralwidget.setStyleSheet(
                """
            QWidget#centralwidget{background-color:qlineargradient(spread:pad, x1:%f, y1:%f, x2:%f, y2:%f, stop:0 rgba(%d, %d, %d, 255), stop:1 rgba(%d, %d, %d, %d));
            }""" %
                (self.mxPos1, self.myPos1, self.mxPos2, self.myPos2, self.r1,
                 self.g1, self.b1, self.r2, self.g2, self.b2, self.myWheel))
            if (a0.button() == Qt.LeftButton):
                self.mxPos1 = a0.x() / self.width()
                self.myPos1 = a0.y() / self.height()
                # s ="也许机器的语言不够浪漫, 但请相信我默默守候的心,千言浓情满天星万行代码与君依。"
            elif (a0.button() == Qt.RightButton):
                self.mxPos2 = a0.x() / self.width()
                self.myPos2 = a0.y() / self.height()

            s = "女生节快乐"
            label.setText(s)
            label.raise_()
            label.setMaximumWidth(13 * 6)
            label.setStyleSheet("""
            font: 87 12pt "黑体";
            color: rgb({}, {}, {});
            """.format(random.randint(0, 255), random.randint(0, 255),
                       random.randint(0, 255)))
            label.setAttribute(Qt.WA_TranslucentBackground)
            label.show()
            ani = QPropertyAnimation(label, b'pos', self)
            ani.setDuration(2000)
            x = a0.pos().x()
            y = a0.pos().y()
            ani.setStartValue(QPoint(x, y))
            ani.setEndValue(QPoint(x, y + 40))
            ani.finished.connect(label.deleteLater)
            ani.start()

    def mouseMoveEvent(self, a0) -> None:
        label = QLabel(parent=self)
        s = random.choice("女生节快乐")
        label.setText(s)
        label.raise_()
        label.setMaximumWidth(13)
        label.setStyleSheet("""
        font: 87 10pt "Arial";
        color: rgba({}, {}, {},{});
        """.format(random.randint(0, 255), random.randint(0, 255),
                   random.randint(0, 255), random.randint(0, 255)))
        label.setAttribute(Qt.WA_TranslucentBackground)
        label.show()
        ani = QPropertyAnimation(label, b'pos', self)
        ani.setDuration(500)
        x = a0.pos().x()
        y = a0.pos().y()
        rx = random.randint(-20, 20)
        ry = random.randint(-20, 20)
        ani.setStartValue(QPoint(x, y))
        ani.setEndValue(QPoint(x + rx, y + ry))
        ani.finished.connect(label.deleteLater)
        ani.start()

    def codeRain(self):

        label = QLabel(parent=self)
        s = ''.join([
            word + '\n' for word in list("我们的每一天,都无法重来,将管理学书籍读遍依旧管不了因你悸动的心。")
        ])
        label.setText(s)
        label.raise_()
        label.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
        label.setMaximumWidth(12)
        label.setMaximumHeight(len(s) * 10)
        label.setMinimumHeight(len(s) * 10)
        label.setWordWrap(True)
        label.setAlignment(Qt.AlignTop)
        label.setStyleSheet("""
        font: 87 10pt "Arial";
        color: rgb(0, 49, 79);
        """)
        label.setAttribute(Qt.WA_TranslucentBackground)
        label.show()
        ani = QPropertyAnimation(label, b'pos', self)

        ani.setDuration(10000)
        xr = random.randint(0, self.label.width())
        yr = random.randint(0, self.height())
        ani.setStartValue(QPoint(xr, -self.width()))
        ani.setEndValue(QPoint(xr, self.height()))
        ani.finished.connect(label.deleteLater)
        ani.start()

    def gifFinished(self):
        if (self.movie.currentFrameNumber() == self.movie.frameCount() - 1):
            self.preloadDialog.close()
            self.movie.stop()
            self.showPreload()

    def showPreload(self):

        self.preloadDialog = QDialog()
        self.preloadImage = QPixmap(':/girl/img/preload.png')
        size = self.preloadImage.size()
        self.move((self.screen.width() - size.width()) / 2,
                  (self.screen.height() - size.height()) / 2)
        self.preloadDialog.setMinimumSize(size)

        layout = QHBoxLayout()
        label = QLabel()
        label.setPixmap(self.preloadImage)

        layout.addWidget(label)

        self.preloadDialog.setLayout(layout)
        self.preloadDialog.setMask(
            QRegion(
                QRect(self.preloadImage.rect().x() + 15,
                      self.preloadImage.rect().y() + 15,
                      self.preloadImage.rect().width() - 20,
                      self.preloadImage.rect().height() - 35)))

        self.timer = QTimer()
        self.preloadDialog.show()
        self.timer.timeout.connect(self.faded)
        self.timer.start(3000)
        self.timer.setInterval(50)
        self.opacity = 100

    def faded(self):
        self.preloadDialog.setWindowOpacity(self.opacity / 100)
        if self.opacity <= 0:
            self.preloadDialog.close()
            self.showMainWindow()
            self.timer.stop()
        else:
            self.opacity -= 1

    def closeEvent(self, a0) -> None:

        for i in range(100, 0, -1):
            self.setWindowOpacity(i / 100)
            time.sleep(0.002)
        self.close()