在3个较小的图像旁边显示一个较大的图像

时间:2019-06-01 18:07:45

标签: python python-3.x pyqt pyqt5

我正在PyQT5中设置布局,我希望在左侧显示一个大图像,紧接在大图像高度的1/3的3个图像旁边显示(以便较小的组合高度图像加起来等于大图像的高度)

这是Layout类中的代码,该类启动并显示gui。所有图像均加载在createGridLayout方法中:

class Layout(QDialog):

    def __init__(self):
        super().__init__()
        self.title = 'Imaging'
        self.left = 10
        self.top = 10
        self.width = 800
        self.height = 500
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createGridLayout()

        windowLayout = QVBoxLayout()
        windowLayout.setSpacing(0)
        windowLayout.addWidget(self.horizontalGroupBox)
        self.setLayout(windowLayout)

        self.show()

    def createGridLayout(self):
        self.horizontalGroupBox = QGroupBox()
        layout = QGridLayout()

        # label is the large image in the grid
        label = QLabel(self)
        pixmap = QPixmap('snap_1,1.tif') # USE RELATIVE PATH TO IMAGE!
        pixmap = pixmap.scaledToHeight(450)
        label.setPixmap(pixmap)

        # simplified version of the above for small images
        label1 = QLabel(self)
        label1.setPixmap(QPixmap('snap_1,1.tif').scaledToHeight(150))

        label2 = QLabel(self)
        label2.setPixmap(QPixmap('snap_1,2.tif').scaledToHeight(150))

        label3 = QLabel(self)
        label3.setPixmap(QPixmap('snap_1,3.tif').scaledToHeight(150))

        # adding images to grid
        layout.addWidget(label,1,0)
        layout.addWidget(label1,0,1)
        layout.addWidget(label2,1,1)
        layout.addWidget(label3,2,1)

        self.horizontalGroupBox.setLayout(layout)

所有成像材料都经过硬编码以进行测试,稍后将对此进行说明,但这不是此问题的一部分。

所以我想要的是下图所示的图像(黑框代表图像):

Wanted result

但是我现在得到的是这样的:

Current result

1 个答案:

答案 0 :(得分:1)

如果要获取以下结构:

┌---------┬---------┐
|         |         |
|         ├---------┤
|         |         |
|         ├---------┤
|         |         |
└---------┴---------┘

然后,您必须分析结构,左侧的项从(0,0)开始,具有3行和1列,因此addWidget()方法必须通过(0,0,3,1)

# ...
# adding images to grid
layout.addWidget(label, 0, 0, 3, 1)
layout.addWidget(label1, 0, 1)
layout.addWidget(label2, 1, 1)
layout.addWidget(label3, 2, 1)
# ...