PyQt - 自动调整大小 widget/picture
PyQt - Automatically resizing widget/picture
我正在开发一种软件,可以从 CAM 获取图片并将其放入小部件 window。由于我的图片是 640x480,我希望它调整图片大小以适应 window 大小,因此用户可以调整 window 大小以放大或缩小图像。
我做了以下算法:
- 获取小部件大小
- 根据图片和widget高度计算比例
- 调整图片大小
- 显示图片
到目前为止,它运行良好,但存在问题。当我打开程序时,它开始无限增长,我知道这是因为小部件正在扩展并且图片变大,因为 window 一开始就在增加,这是一个积极的反馈。
但是,我已经尝试将尺寸政策更改为首选、固定等。并且 none 奏效了。
我的window结构是这样的:Widget->VLayout->Label(Pixmap image)
一种可能的解决方案是创建自定义小部件并覆盖 paintEvent 方法,如以下代码所示。
class Label(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
self.p = QPixmap()
def setPixmap(self, p):
self.p = p
self.update()
def paintEvent(self, event):
if not self.p.isNull():
painter = QPainter(self)
painter.setRenderHint(QPainter.SmoothPixmapTransform)
painter.drawPixmap(self.rect(), self.p)
class Widget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self)
lb = Label(self)
lb.setPixmap(QPixmap("car.jpg"))
lay.addWidget(lb)
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
我正在开发一种软件,可以从 CAM 获取图片并将其放入小部件 window。由于我的图片是 640x480,我希望它调整图片大小以适应 window 大小,因此用户可以调整 window 大小以放大或缩小图像。 我做了以下算法:
- 获取小部件大小
- 根据图片和widget高度计算比例
- 调整图片大小
- 显示图片
到目前为止,它运行良好,但存在问题。当我打开程序时,它开始无限增长,我知道这是因为小部件正在扩展并且图片变大,因为 window 一开始就在增加,这是一个积极的反馈。 但是,我已经尝试将尺寸政策更改为首选、固定等。并且 none 奏效了。
我的window结构是这样的:Widget->VLayout->Label(Pixmap image)
一种可能的解决方案是创建自定义小部件并覆盖 paintEvent 方法,如以下代码所示。
class Label(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
self.p = QPixmap()
def setPixmap(self, p):
self.p = p
self.update()
def paintEvent(self, event):
if not self.p.isNull():
painter = QPainter(self)
painter.setRenderHint(QPainter.SmoothPixmapTransform)
painter.drawPixmap(self.rect(), self.p)
class Widget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self)
lb = Label(self)
lb.setPixmap(QPixmap("car.jpg"))
lay.addWidget(lb)
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())