关于使用QGridLayout addWidget(QWidget,x,y)进行位置操作的问题

问题描述 投票:0回答:1

这是一个非常简单的问题,我刚接触PyQt5,对QGridLayout的工作方式有点困惑...

def init_main_page(self):
        layout = QGridLayout()

        b1 = buttons.QPushButton("0",self.main_page)
        b2 = buttons.QPushButton("1",self.main_page)
        b3 = buttons.QPushButton("2",self.main_page)

        layout.addWidget(b1,0,0)
        layout.addWidget(b2,5,0)
        layout.addWidget(b3,1,0)

        self.main_page.setLayout(layout)

我遇到的问题是,无论我在addwidget(QWidget,x,y)中设置x和y参数有多高,它的b1 b2和b3始终保持等距。我正在尝试弄清楚如何在保持比例设置的同时操纵按钮的位置(因此避免使用QPushButton.move()),并且从我所看到的情况来看,QGridLayout是执行此操作的最佳方法。

python pyqt pyqt5 qgridlayout
1个回答
0
投票

通过“跳过”行或列来设置网格布局中的窗口小部件的坐标几乎没有用,因为那些网格坐标仅告诉布局管理器窗口小部件将位于哪个“插槽”:因为行中没有任何内容2到4,将不使用该空间。

要实现所需的设置,需要设置stretch factors,并可能在指定的行中使用最小高度。

    layout.addWidget(b1, 0, 0)
    layout.addWidget(b3, 1, 0)
    layout.addWidget(b2, 2, 0)
    layout.setRowStretch(2, 1)
    layout.setRowMinimumHeight(2, 50)

但是这可能不是您想要的,因为它将第三个按钮放置在行网格的垂直中心(底部留有空白)。

为避免出现两种可能的解决方案:

  • [通过将对齐方式设置为底部来添加小部件:

    layout.addWidget(b2, 2, 0, alignment=QtCore.Qt.AlignBottom)
    
  • 将最后一个小部件添加到fourth行,并为第三个空行设置拉伸和最小高度。

        layout.addWidget(b2, 3, 0)
        layout.setRowStretch(2, 1)
        layout.setRowMinimumHeight(2, 50)
© www.soinside.com 2019 - 2024. All rights reserved.