python - 在 QTableWidget 中的列标题下添加边框

标签 python qt pyqt border qtablewidget

我有一个表格小部件,在对话框中有两个列标题,如下所示:

enter image description here

名为“Index”和“Label”的列标题之间存在分隔,但这些标题与其下方的行之间没有分隔边框。如何添加?

假设表被实例化为:

table = QTableWidget(6, 2, self)

我知道我可以通过 headerItem = table.horizo​​ntalHeaderItem(0) 修改一些属性并将其设置回来,将第一个水平标题作为 QTableWidgetItem,但我不确定要设置哪些属性设置或是否有更直接的方法。

编辑:

如果我提取标题并通过以下方式设置其底层框架的样式、阴影和线宽属性:

header = table.horizontalHeader()
header.setFrameStyle(QFrame.Box | QFrame.Plain)
header.setLineWidth(1)
table.setHorizontalHeader(header)

我最终得到的结果是这样的:

enter image description here

这样一来,标题周围就会出现边框。这可以分别为每个标题项完成,但有几个问题:

  1. 边框超出下方单元格的宽度
  2. 我仍然需要将框架的颜色与现有线条相匹配,这样看起来才算体面。
  3. 分隔“索引”和“标签”的垂直线似乎相对于分隔下方单元格的线发生了移动(除非我的眼睛在欺骗我)。

是否有更“内置”的方式来做到这一点?

最佳答案

我遇到了同样的问题。首先要注意的是,这只发生在 Windows 10 上。在其他操作系统上,没有什么可修复的,它可以正常工作。然而,在 Windows 10 上,绘制基元不会绘制底部边框(这是默认的 Windows 10 表格标题样式 - 正如在 Windows 文件资源管理器中所见)。这很不幸,但可以通过以下样式表解决:

if(QSysInfo::windowsVersion()==QSysInfo::WV_WINDOWS10){
    setStyleSheet(
        "QHeaderView::section{"
            "border-top:0px solid #D8D8D8;"
            "border-left:0px solid #D8D8D8;"
            "border-right:1px solid #D8D8D8;"
            "border-bottom: 1px solid #D8D8D8;"
            "background-color:white;"
            "padding:4px;"
        "}"
        "QTableCornerButton::section{"
            "border-top:0px solid #D8D8D8;"
            "border-left:0px solid #D8D8D8;"
            "border-right:1px solid #D8D8D8;"
            "border-bottom: 1px solid #D8D8D8;"
            "background-color:white;"
        "}");}

很抱歉用 C++ 代码打扰你,但它应该很容易转换成有效的 pyqt 代码。

注意 1:背景颜色和填充是不幸的,但它们是使我们的自定义渲染看起来像默认渲染所必需的。

注2:边框的颜色是我系统上网格的颜色。我没有使用默认标题的颜色。

注3:QTableCornerButton::section 部分是添加左上角下方缺少的边框所必需的。如果垂直标题不可见,则缺失的行也不可见。

希望这对您有所帮助。

关于python - 在 QTableWidget 中的列标题下添加边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554640/

相关文章:

python - 如何在 Python 中从语料库创建词云?

c++ - 是否可以在一个 main.ui 文件中包含多个 .ui 文件?

python - 将 QScrollArea 添加到 QTabWidget

python - 使用 numpy 将图像转换为灰度

python - Tkinter 导致 Jupyter 内核崩溃?

python - 在 Python 中使用 COM 事件

c++ - 将多个 QTimers 调用排队到插槽

c++ - Qt 程序意外结束

python - 如何使用QPainterPath?

python - pyqt:如何从 QVBoxLayout 中删除元素?