如何在 QTableWidget 中有垂直网格线?

Posted

技术标签:

【中文标题】如何在 QTableWidget 中有垂直网格线?【英文标题】:How to have vertical grid lines in QTableWidget? 【发布时间】:2020-09-19 17:25:18 【问题描述】:

现在我正在使用 self.setShowGrid(False),但它完全删除了网格线。所以要么全有,要么全无。但是我想要只有垂直的网格线,而不是水平的,就像图片中一样。

这可能吗?如何做到这一点?

【问题讨论】:

1.它默认安装。 2. 是的。 3. 我试图运行它,但它使程序崩溃。我会再试一次。 4. 有一个从宿主应用程序应用的默认样式表,我将尝试获取它并在此处发布。 3. QStyleSheetStyle 样式表在这里:1600 > 行代码。我应该将其发布在 OP 中吗?我现在就试试你说的。 paste.ofcode dot org /399QJk8nYJWBUxjQ56fmZra 其实它是另一个叫houdini的应用,但它就像maya,我现在就试试你的下一个建议。 是的,我也使用相同的代码遇到此错误:文件“”,第 6 行,在油漆类型错误:super() 至少需要 1 个参数(给定 0)我会改变现在到左上角。 【参考方案1】:

一种可能的解决方案是使用委托绘制这些线条:

from PyQt5 import QtCore, QtGui, QtWidgets


class VerticalLineDelegate(QtWidgets.QStyledItemDelegate):
    def paint(self, painter, option, index):
        super(VerticalLineDelegate, self).paint(painter, option, index)
        line = QtCore.QLine(option.rect.topRight(), option.rect.bottomRight())
        color = option.palette.color(QtGui.QPalette.Mid)
        painter.save()
        painter.setPen(QtGui.QPen(color))
        painter.drawLine(line)
        painter.restore()

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QTableWidget(10, 4)
    delegate = VerticalLineDelegate(w)
    w.setItemDelegate(delegate)
    w.setShowGrid(False)
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

【讨论】:

谢谢,我刚试过,但我丢失了所有项目,但有一个滚动条,当我滚动时它滞后,也没有网格线。为什么会这样? @JoanVenge 我看不到这个问题,没有minimal reproducible example 也没有证明您指出的内容(可能是一些显示您观察到的问题的图像),我无法为您提供帮助。我的代码在不修改底层油漆的情况下添加了画线。 好的,让我尝试隔离问题。 好的,我按原样运行您的代码,但似乎分配的默认样式表似乎会导致问题,但这是我使用您的方法设置项目委托之前和之后:imgur.com/a/nVuwb3c @JoanVenge 尝试更改为 color = QtGui.QColor("red") 并告诉我你得到了什么。我还在等 MRE

以上是关于如何在 QTableWidget 中有垂直网格线?的主要内容,如果未能解决你的问题,请参考以下文章

QTableWidget:我怎样才能用更少的垂直间距填充更紧密的线条?

让垂直网格线出现在 matplotlib 的线图中

echarts-去掉垂直网格线

在 QTableView/QTableWidget 中:如何使交替行完全垂直填充表格?

如何启用/禁用 QTableWidget 的水平/垂直标题?

平台树型部件获取或设置水平/垂直网格线