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

时间:2016-07-24 17:14:16

标签: python qt pyqt border qtablewidget

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

enter image description here

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

假设表格被实例化为:

table = QTableWidget(6, 2, self)

我知道通过执行headerItem = table.horizontalHeaderItem(0)修改一些属性并将其设置回来,我可以将第一个水平标题作为QTableWidgetItem获取,但我不确定要设置的属性或是否有更简单的方法。

编辑:

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

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

我最终得到了这样的东西:

enter image description here

这样,标题周围会显示边框。这可以分别为每个标题项完成,但有几个问题:

  1. 边框延伸超过
  2. 下方单元格的宽度
  3. 我仍然需要将框架的颜色与现有的线条相匹配,以使其看起来有点不错。
  4. 看起来分隔“索引”和“标签”的垂直线相对于分隔下方单元格的线移位(除非我的眼睛在我身上耍花招)。
  5. 是否有更“内置”的方式来做到这一点?

3 个答案:

答案 0 :(得分: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部分。如果垂直标题不可见,则缺失的行也是不可见的。

希望这有帮助。

答案 1 :(得分:2)

试试这个:

header.setStyleSheet( "QHeaderView::section { border-bottom: 1px solid gray; }" );

答案 2 :(得分:0)

对您的代码稍作调整对我有用:

 horizontalHeader().setStyleSheet( "QHeaderView::section { border-bottom: 1px solid gray; }" )