小编Plo*_*tin的帖子

如何让 QLabel 的大小与它所显示的 QPixmap 的大小完全相同?

我需要一些有关 QT/PyQt 布局的建议。

我想要实现的是让图像显示、居中、正确缩放,在保持其纵横比的同时占用尽可能多的空间。这可以使用以下方法轻松完成:

class Demo(QWidget):
    def __init__(self) -> None:
        super().__init__()
        self.setWindowState(Qt.WindowMaximized)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.button = QPushButton("Next image")
        self.label = QLabel()
        self.label.setStyleSheet("QLabel { background-color : red; }")
        self.label.setAlignment(Qt.AlignCenter)

        self.layout.addWidget(self.label)
        self.layout.addWidget(self.button)

        self.button.clicked.connect(self.showImage)
        self.show()


    def showImage(self):
        self.pixmap = QPixmap("image.jpg")
        scaled = self.pixmap.scaled(self.label.size(), Qt.KeepAspectRatio)
        self.label.setPixmap(scaled)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Demo()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,图像将显示在标签的中心,周围有很多“多余的标签”,请参见屏幕截图,红色的东西

在此输入图像描述

但我需要标签与图像的大小完全相同。我想在图像上做一些橡皮筋操作以选择其中的一部分(选择框以供稍后在视网膜训练中使用)并计算我需要 mapToGlobal 和 mapFromGlobal 的框的正确大小。我无法从像素图本身执行此操作(因为它不是小部件),并且当我从标签执行此操作时,我会得到错误的值,因为它比实际图像大。

现在,我可以将 GridLayout 或 HBoxLayout 与 SpacerItems 一起使用。问题在于其中的逻辑。标签的大小(和 SpacerItems 在 UI 加载时确定。当我稍后动态添加图像时,它会缩放到标签的大小,即使它可能更大,只要 SpacerItems 会“让路”做标签。结果是,我的顶部和底部不是“太多标签”,而是“太多标签”。我希望你明白我的意思。

我目前所做的是:

  1. 将窗口大小调整为屏幕分辨率
  2. 添加(缩放的)图像
  3. 调整大小 …

python pyqt qlabel qlayout

5
推荐指数
1
解决办法
2851
查看次数

标签 统计

pyqt ×1

python ×1

qlabel ×1

qlayout ×1