PyQt4 - 如何动态调整 Qt 布局的大小

标签 pyqt4

所以我一直在尝试做的是生成一个小部件列表,将它们添加到网格布局中,然后将它们添加到选项卡中并呈现给用户。我现在遇到的问题是网格布局跨越每个选项卡的整个页面,但我没有那么多行要添加,因此行最终跨越整个页面并且不会与顶部对齐。 我尝试设置对齐方式和verticalSpacing,但它们都没有改变小部件的显示方式。

例如:

我希望小部件显示如下:

WidgetName WidgetLabel 
WidgetName WidgetLabel     
WidgetName WidgetLabel 
WidgetName WidgetLabel 

相反,我得到了这个:

WidgetName WidgetLabel


WidgetName WidgetLabel 


WidgetName WidgetLabel


WidgetName WidgetLabel

有没有办法将所有元素强制到顶部或向任何所需的方向移动?

最佳答案

默认情况下,布局将占用其父窗口小部件允许的全部空间。我通常会做的是将网格放置在另一个布局中,并在末尾添加一些拉伸(stretch)。

class Widget(QtGui.QWidget):

    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        mainLayout = QtGui.QVBoxLayout(self)

        grid = QtGui.QGridLayout()
        # you can directly control the spacing here
        grid.setSpacing(20)

        for row in xrange(5):
            grid.addWidget(QtGui.QLabel("Text"), row, 0, 
                1, 1, QtCore.Qt.AlignTop)
            grid.addWidget(QtGui.QLabel(str(row)), row, 1, 
                1, 1, QtCore.Qt.AlignTop)

        mainLayout.addLayout(grid)
        mainLayout.addStretch()

拉伸(stretch)会耗尽所有剩余的可用空间,并将网格挤压到顶部。这样做的好处是您不必向网格本身添加任何其他异常内容。拉伸(stretch)是父布局的一部分。

现在,setSpacing 将为您提供将空间推回到项目中的精细控制。

关于PyQt4 - 如何动态调整 Qt 布局的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12223452/

相关文章:

python - 在二维图表中显示函数的值

python - 类型错误 : closeEvent() takes exactly 4 arguments (2 given)

python - 在 Lion (OSX) 上安装 PyQt4 时出现问题

python - 当编辑完成时,PyQt 中的 QComboBox 是否有信号?

python - 在不删除内容的情况下在 PyQt QAbstractTableModel 中编辑表格

python - 如何在 PyQt4 的水平布局中拉伸(stretch)单个小部件?

python - PyQt 窗口构建

python - 在 HTML <td> 元素中自动换行 Qt Qlabel 文本

python - 在 PyQt4 中为 listwidget 添加右键单击功能

python - 如何在 PyQt 中编写图像按钮?