Python PyQt4 QTableWidget 表头样式表未正常工作

2 投票
1 回答
1973 浏览
提问于 2025-04-18 02:46

我有一个 QTableWidget,并且给它应用了一些样式表:

    QTableWidget
    {
    border:2px groove #96A8A8;
    border-radius:3px;
    selection-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                             stop: 0 #D7F4F7, stop: 0.4 #CEECF0,
                             stop: 0.6 #C5E4E8, stop: 1.0 #D7F4F7);
    selection-color:black;
    }

    QTableWidget QHeaderView::section
    {
    border-bottom:0px groove #8BA6D9;
    border-left:0px groove #8BA6D9;
    border-right:2px groove #8BA6D9;
    border-top:0px;
    padding:5px;
    background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                             stop: 0 #F8FCFE, stop: 0.4 #EBEEF2,
                             stop: 0.5 #E0E5EA, stop: 1.0 #DADEEA);


    color:black;
    outline:0px;
    }

    QTableWidget::item
    {
    padding:5px;
    outline:0px;
    }

这段CSS代码让我得到了想要的外观。不过,当我开始往表格里添加 TableWidgetItems(超过15个项目/行)时,表格的标题装饰就消失了(也就是说,标题的样式又变回了默认的窗口样式),尽管表格其他的样式属性仍然有效。

这是什么原因呢?

顺便说一下,我还给表格应用了以下属性:

mytable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers)
mytable.setSelectionBehavior(QtGui.QTableWidget.SelectRows)
mytable.setSelectionMode(QtGui.QTableWidget.SingleSelection)
mytable.horizontalHeader().setStretchLastSection(True)
vheight = mytable.verticalHeader()
vheight.setDefaultSectionSize(50)

我在Windows XP SP3上使用的是Python 2.7.3

1 个回答

2

我不知道是什么原因导致了这个问题。不过,有一个解决办法可以让标题的装饰保持不变。你可以通过 设置应用程序的样式表 来实现,方法是使用 QApplication.setStyleSheet,而不是单独为某个小部件设置样式表。

这样做会让所有的 QTableWidget 都使用相同的样式表,算是一个额外的好处,前提是你想要这样的效果。如果不想这样,你可以创建一个子类,并根据子类的小部件来设置样式表。

撰写回答