【问题标题】:PyQt - Automatically resizing widget/picturePyQt - 自动调整小部件/图片的大小
【发布时间】:2017-11-14 06:31:16
【问题描述】:

我正在开发一种从 CAM 中获取图片并将其放入小部件窗口的软件。由于我的图片是 640x480,我希望它调整图片大小以适合窗口大小,因此用户可以调整窗口大小以放大或缩小图像。 我做了以下算法:

  1. 获取小部件大小
  2. 根据图片和小部件高度计算配给
  3. 调整图片大小
  4. 显示图片

到目前为止,它运行良好,但存在一个问题。当我打开程序时,它开始无限增长,我知道这是因为小部件正在扩展并且图片变得更大,因为窗口首先在增加,这是一个积极的反馈。 但是,我已经尝试将尺寸策略更改为 Preferred、Fixed 等,但都没有奏效。

我的窗口结构是这样的:Widget->VLayout->Label(Pixmap image)

【问题讨论】:

    标签: python image-processing pyqt qt-designer autoresize


    【解决方案1】:

    一种可能的解决方案是创建一个自定义小部件并覆盖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 来获取几张照片,比如视频。所以这样标签只有在调整大小时才会刷新,而我希望它在每张新图片时也刷新。有没有办法解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多