PyQT 按钮在 QGridLayout 中的大小不正确

Posted

技术标签:

【中文标题】PyQT 按钮在 QGridLayout 中的大小不正确【英文标题】:PyQT Buttons has Incorrect Size in QGridLayout 【发布时间】:2016-09-16 16:47:09 【问题描述】:

我刚刚在 Windows 7 和 Python 2.7 上启动了一个简单的 PyQt 应用程序。有2个按钮和一张桌子。 Apple 按钮应比橙色按钮高 5 倍,并且桌子应与 Apple 按钮高度相同。

尽管使用grid.addWidget(appleBtn, 0, 0, 5, 1) 定义其高度,但两个按钮的高度相同。

有什么建议吗?

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys


def main():

    app     = QApplication(sys.argv)
    w       = QTabWidget()

    # Tab
    grid = QGridLayout()
    tab = QWidget() 
    tab.setLayout(grid)
    w.addTab(tab,"Hello World")


    # Button 1
    appleBtn = QPushButton("Apples")
    appleBtn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)   
    grid.addWidget(appleBtn, 0, 0, 5, 1)


    # Button 1
    orangeBtn = QPushButton("Oranges")
    appleBtn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)   
    grid.addWidget(orangeBtn, 5, 0, 1, 1)


    # Table
    fruitTable = QTableWidget()
    fruitTable.setRowCount(5)
    fruitTable.setColumnCount(2)
    fruitTable.setHorizontalHeaderLabels(QString("Fruit;Color;").split(";"))
    fruitTable.horizontalHeader().setResizeMode(QHeaderView.Stretch)
    grid.addWidget(fruitTable, 6, 0, 1, 1)


    w.resize(400,300)
    w.setWindowTitle('Test')
    w.show()
    sys.exit(app.exec_())


main()

【问题讨论】:

【参考方案1】:

addWidget 方法不像你想象的那样工作。第二个和第三个参数指定行/列,而第三个和第四个指定要跨越多少行/列。

指定比例高度的正确方法是使用setRowStretch

grid.addWidget(appleBtn, 0, 0)
grid.setRowStretch(0, 5)
...
grid.addWidget(orangeBtn, 1, 0)
...
grid.addWidget(fruitTable, 2, 0)
grid.setRowStretch(2, 5)

【讨论】:

以上是关于PyQT 按钮在 QGridLayout 中的大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何将pyqt5中的后退按钮和前进按钮添加到我的QGridLayout

PyQt:QGridLayout 中的 setSpacing

PyQt4:根据 QMainWindow 的大小设置 QGridLayout 的大小

将图像插入 QGridLayout 并在 PyQt5 中的图像顶部绘制

如何在 QGridLayout 中设置小部件的顺序

隐藏子小部件时,QGridLayout 未调整大小或重新绘制