QT - QGridLayout需要不同的标题行间距

时间:2015-06-30 23:41:02

标签: qt pyqt

我有一个QGridLayout,我需要所有行中的间距,但不需要在第一行中。我怎样才能实现这一目标?在下图中,您可以看到单元格之间的空间。我可以用以下方式设置间距:

DELETE FROM workoutplan
JOIN account ON workoutplan.Account_Username = account.Username
JOIN customer ON account.Customer_idCustomer = customer.idCustomer
WHERE Customer_idCustomer = 100

但这会影响整个网格。

enter image description here

3 个答案:

答案 0 :(得分:2)

通过删除水平间距并在标题标签上使用 columnSpan ,可以非常轻松地完成此操作。

这是一个简单的演示脚本:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        layout = QtGui.QGridLayout(self)
        layout.setHorizontalSpacing(0)
        self.setStyleSheet('background: black; color: white')
        headers = 'Name: Item: Color: Status:'.split()
        for column, header in enumerate(headers):
            label = QtGui.QLabel(header)
            label.setStyleSheet('background: silver; padding: 5px')
            if column < len(headers) - 1:
                layout.addWidget(label, 0, 2 * column, 1, 2)
                layout.setColumnMinimumWidth(2 * column + 1, 10)
            else:
                layout.addWidget(label, 0, 2 * column)
            widget = QtGui.QWidget()
            widget.setStyleSheet('border: 1px solid white')
            layout.addWidget(widget, 1, 2 * column)
        layout.setRowStretch(1, 1)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 450, 90)
    window.show()
    sys.exit(app.exec_())

结果:

enter image description here

答案 1 :(得分:1)

Qt没有任何魔力来实现这一目标。您需要单独创建自己的标题,可以通过在QWidget中创建水平布局来完成。在gridlayout所在的小部件的resizeEvent中,您需要根据gridlayout每列中小部件的宽度显式更改标题布局中小部件的宽度。

如果您不想这样做,请考虑使用QTableWidget,它包含内置标题

答案 2 :(得分:1)

一个选项可能是setSpacing(0)中的项目之间没有间距(使用QGridLayout)。这实现了标题之间没有间距的目标。

要实现后续行中项目之间的间距,您可以在每个项目周围引入另一个布局,并在任一侧使用间隔符或空小部件。

或者,您可以在当前项目之间的网格布局中插入列(同时仍设置setSpacing(0))。这些列的标题行中的项目可以设置为显示为好像它们是您当前具有的标题项目的一部分。