Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT-QGridLayout需要不同的标题行间距_Qt_Pyqt - Fatal编程技术网

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

QT-QGridLayout需要不同的标题行间距,qt,pyqt,Qt,Pyqt,我有一个QGridLayout,我需要所有行的间距,但不需要第一行的间距。我怎样才能做到这一点?在下图中,您可以看到单元格之间的空间。我可以通过以下方式设置间距: self.grid.setSpacing(0) 但这将影响整个网格 Qt中没有魔法可以实现这一点。您将需要单独创建自己的标题,您可以通过在QWidget内创建水平布局来实现这一点。在gridlayout所在的widget的resizeEvent中,您需要根据gridlayout的每列中的widget的宽度,显式地更改标题布局中wid

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

self.grid.setSpacing(0)
但这将影响整个网格


Qt中没有魔法可以实现这一点。您将需要单独创建自己的标题,您可以通过在QWidget内创建水平布局来实现这一点。在gridlayout所在的widget的
resizeEvent
中,您需要根据gridlayout的每列中的widget的宽度,显式地更改标题布局中widget的宽度


如果您不想这样做,请考虑使用<代码> QTable WIDGET < /C> >,它包含一个内置的页眉

< P> >一个选项可以是,在<代码> QGRIDLays中的条目之间没有间隔(使用<代码>设置间距(0)< /代码>)。这实现了标题之间没有间距的目标

为了实现后续行中项目之间的间距,可以在每个项目周围引入另一个布局,在每一侧使用空格或空窗口小部件



或者,您可以在网格布局中的当前项目之间插入列(同时仍具有
setspace(0)
set)。这些列的标题行中的项目可以设置样式,使其显示为当前标题项目的一部分。

通过删除水平间距并在标题标签上使用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_())
从PyQt4导入QtCore,QtGui
类窗口(QtGui.QWidget):
定义初始化(自):
超级(窗口,自我)。\uuuu初始化
layout=QtGui.QGridLayout(self)
布局。设置水平间距(0)
self.setStyleSheet('背景:黑色;颜色:白色')
标题='名称:项:颜色:状态:'。拆分()
对于列,枚举中的标题(标题):
label=QtGui.QLabel(标题)
label.setStyleSheet('背景:银色;填充:5px')
如果列
结果:


请提供更多详细信息。你的问题不清楚。我做了一些编辑。是否更清楚?您不希望第一行中的单元格之间存在间距,而是希望后续行中的单元格之间存在间距?你说的是水平间距还是垂直间距(或者两者都有?)QTableWidget和QGridLayout之间的最大区别是什么?顾名思义,QTableWidget是一个小部件,这意味着它将提供更多的控制来处理大小、事件等。此外,你可以有效地处理QTableWidget中的项目,因为它们是
QTableWidgetItem
。这些项目还将提供一些方便的方法。您的情况更适合使用qtablewidget,这正是我等待的答案!如果您增加窗口的高度,标题也会被拉伸,我认为这不应该发生。这可能看起来像标题,但实际情况并非如此。@qurban。我做了一个小的调整来固定收割台的高度。但我的演示脚本只是为了回答OPs关于水平间距的特定问题(我认为它确实如此)。可能还有其他调整,但这似乎超出了原始问题的范围。当然,你的解决方案是解决OP问题的明智方法。但我只是想确定一点,即头部应该是固定高度的