Exemple #1
0
class YPictureBubble(QLabel):
    def __init__(self, widget):
        super().__init__(widget)
        self.parent_widget = widget
        self.setScaledContents(True)

    def setPicture(self, image_name):
        self.filename = image_name
        max_width = 300
        is_gif = False
        if image_name[-3:].lower() == 'gif':
            self.gif = QMovie(image_name)
            if self.gif.isValid():
                is_gif = True
                self.setMovie(self.gif)
                self.gif.start()
                g = self.gif.currentImage()
                w, h = (g.width(), g.height())
        if not is_gif:
            im = Image.open(image_name)
            w, h = im.size

            self.setPixmap(im.toqpixmap())

        if w >= h and w > max_width:
            ratio = max_width / w
        elif h > w and h > max_width:
            ratio = max_width / h
        else:
            ratio = 1
        w, h = int(w * ratio), int(h * ratio)
        self.resize(w, h)
Exemple #2
0
    def load(self, source):
        """Load anything that QImageReader or QMovie constructors accept"""

        # Use QImageReader to identify animated GIFs for separate handling
        # (Thanks to https://stackoverflow.com/a/20674469/435253 for this)
        image_reader = QImageReader(source)
        from PyQt5.QtGui import QImageIOHandler
        if image_reader.supportsAnimation() and image_reader.imageCount() > 1:
            movie = QMovie(source)

            # Calculate the aspect ratio and adjust the widget size
            movie.jumpToFrame(0)
            movie_size = movie.currentImage().size()
            self.movie_aspect = movie_size.width() / movie_size.height()
            self.resizeEvent()

            self.label.setMovie(movie)
            movie.start()

            # Free memory if the previous image was non-animated
            self.orig_pixmap = None
        else:
            self.orig_pixmap = QPixmap(image_reader.read())
            self.label.setPixmap(self.orig_pixmap)

            # Fail quickly if our violated invariants result in stale
            # aspect-ratio information getting reused
            self.movie_aspect = None

        # Keep the image from preventing downscaling
        self.setMinimumSize(1, 1)
    def __init__(self, parent):
        super().__init__(parent)

        if os.path.exists(ImageConfig.ABOUT_DIALOG_BACKGROUND_FILE):
            self.setWindowTitle("关于 - 仅供学习研究使用")

            label = QLabel(self)
            label.setMaximumSize(self.MAX_LENGTH, self.MAX_LENGTH)
            movie = QMovie(ImageConfig.ABOUT_DIALOG_BACKGROUND_FILE)
            label.setMovie(movie)

            movie.start()
            self.resize(movie.currentImage().size())

        else:
            self.ui = loadUi(os.path.join(RESOURCE_PATH, "about_dialog.ui"),
                             self)
Exemple #4
0
 def set_loading(self):
     loader = QMovie(appctxt.get_resource("animations/loader.gif"))
     self.preview_box.setMovie(loader)
     loader.jumpToFrame(0)
     self.preview_box.resize(loader.currentImage().size())
     loader.start()