【问题标题】:How to zoom a picture implemented with QPixmap on pyqt5如何在pyqt5上缩放使用QPixmap实现的图片
【发布时间】:2020-10-02 12:03:58
【问题描述】:

我正在尝试放大使用 QPixmap 实现的图片,但没有任何效果。这是我实现这一点的方式。 (self.hauteur是一个代表高度的浮点数)

self.label.setPixmap(QPixmap(self.image).scaledToHeight(self.hauteur))

我已将标签放入布局中,然后将其放入滚动小部件中。

self.layout6.addWidget(self.label)

...

self.widget1=QWidget()
    self.widget1.setLayout(self.layout6)
    self.scroll1.setWidget(self.widget1)
    self.tab1.layout.addWidget(self.scroll1,0,1,1,2)

...

self.tab1.setLayout(self.tab1.layout)

如果我想构建一个方法来通过按钮放大或缩小窗口中的图片,我应该怎么做?我尝试调整标签的大小,但它不起作用。

self.action5=QAction(QIcon("Icon/in"),"Zoom in",self)
    self.action5.triggered.connect(self.zoomin)

...

 def zoomin(self):
    self.hauteur+=100
    self.label.scaledToHeight(self.hauteur)
    self.update()

【问题讨论】:

  • 您提供的代码不是MRE,请阅读链接
  • 您尝试缩放标签,但可能您必须缩放原始图像QPixmap 并再次将其放入标签中(以替换之前的图像)。

标签: python pyqt5 qlabel qpixmap


【解决方案1】:

我会调整原始QPixmap 的大小并再次将其放入label

    self.scale *= 2

    size = self.pixmap.size()

    scaled_pixmap = self.pixmap.scaled(self.scale * size)

    self.label.setPixmap(scaled_pixmap)

最少的工作代码:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class MyApp(QWidget):

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

        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.button_zoom_in = QPushButton('Zoom IN', self)
        self.button_zoom_in.clicked.connect(self.on_zoom_in)
        self.layout.addWidget(self.button_zoom_in)

        self.button_zoom_out = QPushButton('Zoom OUT', self) 
        self.button_zoom_out.clicked.connect(self.on_zoom_out)
        self.layout.addWidget(self.button_zoom_out)

        self.pixmap = QPixmap('image.jpg')

        self.label = QLabel(self)
        self.label.setPixmap(self.pixmap)
        self.layout.addWidget(self.label)

        self.scale = 1

        self.show()

    def on_zoom_in(self, event):
        self.scale *= 2
        self.resize_image()

    def on_zoom_out(self, event):
        self.scale /= 2
        self.resize_image()

    def resize_image(self):
        size = self.pixmap.size()

        scaled_pixmap = self.pixmap.scaled(self.scale * size)

        self.label.setPixmap(scaled_pixmap)

# --- main ---

app = QApplication([])
win = MyApp()
app.exec()

编辑:同样使用self.height += 100 而不是self.scale *= 2

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class MyApp(QWidget):

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

        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.button_zoom_in = QPushButton('Zoom IN', self)
        self.button_zoom_in.clicked.connect(self.on_zoom_in)
        self.layout.addWidget(self.button_zoom_in)

        self.button_zoom_out = QPushButton('Zoom OUT', self) 
        self.button_zoom_out.clicked.connect(self.on_zoom_out)
        self.layout.addWidget(self.button_zoom_out)

        self.pixmap = QPixmap('image.jpg')
        self.height = self.pixmap.height()

        self.label = QLabel(self)
        self.label.setPixmap(self.pixmap)
        self.layout.addWidget(self.label)

        self.show()

    def on_zoom_in(self, event):
        self.height += 100
        self.resize_image()

    def on_zoom_out(self, event):
        self.height -= 100
        self.resize_image()

    def resize_image(self):
        scaled_pixmap = self.pixmap.scaledToHeight(self.height)
        self.label.setPixmap(scaled_pixmap)

# --- main ---

app = QApplication([])
win = MyApp()
app.exec()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多