【发布时间】:2020-09-10 04:27:47
【问题描述】:
我有以下代码:
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QGroupBox, QLabel
from PyQt5.QtGui import QPixmap
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.imgLabel = QLabel(self)
pixmap = QPixmap("feedreader.jpg")
self.imgLabel.setPixmap(pixmap)
self.imgLabel.setAlignment(Qt.AlignCenter | Qt.AlignCenter)
self.imgLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
scroll = QScrollArea()
scroll.setWidget(self.imgLabel)
scroll.setWidgetResizable(True)
scroll.setFrameShape(QFrame.NoFrame)
self.zoomInButton = QPushButton('Zoom In', self)
self.zoomInButton.clicked.connect(self.onZoomIn)
self.zoomOutButton = QPushButton('Zoom Out', self)
self.zoomOutButton.clicked.connect(self.onZoomOut)
self.buttonGroup = QGroupBox()
vboxButtons = QVBoxLayout()
vboxButtons.addWidget(self.zoomInButton)
vboxButtons.addWidget(self.zoomOutButton)
vboxButtons.addStretch()
self.buttonGroup.setLayout(vboxButtons)
self.hbox = QHBoxLayout()
self.hbox.addWidget(scroll)
self.hbox.addWidget(self.buttonGroup)
self.setLayout(self.hbox)
self.init()
self.show()
def init(self):
self.scaleFactor = 1.0
def onZoomIn(self):
self.scaleImage(1.25)
def onZoomOut(self):
self.scaleImage(0.8)
def scaleImage(self, factor):
self.scaleFactor *= factor
pm = self.imgLabel.pixmap()
x = pm.width() * self.scaleFactor
y = pm.width() * self.scaleFactor
if x > 0 and y > 0:
pm = pm.scaled(x, y, Qt.KeepAspectRatio)
self.imgLabel.setPixmap(pm)
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
我可以更好地实现它吗?当我缩小太多时它会写
QPixmap::scaled: Pixmap is a null pixmap
我无法放大
当我在放大和缩小之间交替时,图像的质量 越来越差了。
我从here 获取参数。他们还好吗?
【问题讨论】:
-
确保
pm.width()*self.scaleFactor和pm.height()*self.scaleFactor都大于0。 -
@alec 我试过了。错误消息消失了,但经常缩小,我无法放大。
-
您每次都需要缩放原始像素图,但无论如何您提供的链接已经包含一个有效的 scaleImage 函数...
-
@eyllanesc 我提供了一个小地图可重现的例子。如果你运行它,它不会像我希望的那样运行。有时按钮没有反应,有时图像消失。