Python 如何定制QTreeWidget头';s字体

Python 如何定制QTreeWidget头';s字体,python,pyqt,Python,Pyqt,使用: 创建了QTreeWidget。它的列标题是给定的名称。设置标题和水平尺寸 现在我想自定义标题的字体大小 tree=QtGui.QTreeWidget() tree.setHeaderLabels(['Column 1','Column 2','Column 3']) tree.setColumnWidth(0, 48) tree.setColumnWidth(1, 48) tree.setColumnWidth(2, 48) 但是像这样的语法中使用的.setFont对标题中

使用:

创建了QTreeWidget。它的列标题是给定的名称。设置标题和水平尺寸

现在我想自定义标题的字体大小

tree=QtGui.QTreeWidget()
tree.setHeaderLabels(['Column 1','Column 2','Column 3'])
tree.setColumnWidth(0, 48)  
tree.setColumnWidth(1, 48)  
tree.setColumnWidth(2, 48)  
但是像这样的语法中使用的
.setFont
对标题中使用的字体大小没有任何可见的影响

我也试过:

font = QtGui.QFont()
font.setPointSize(8)
tree.headerItem().setFont(0, font)
没有成功。使用什么方法自定义QTreeWidget列标题中使用的字体大小

稍后编辑: 示例1使列标题变大,但不影响字体大小(?!):

示例2再次尝试使用QSS=不影响字体大小:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
tree=QtGui.QTreeWidget()
tree.setHeaderLabels(['One','Two','Tree','Four','Five'])
font=QtGui.QFont()            
font.setPointSize(24)
tree.header().setFont(font)
tree.show()
sys.exit(app.exec_())
示例3使用setHeaderItem。没有成功:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
tree=QtGui.QTreeWidget()
tree.setHeaderLabels(['One','Two','Tree','Four','Five'])
tree.header().setStyleSheet('font: bold 24px; font-size: 32pt; font-family: Courier;')
tree.setStyleSheet('font: bold 24px; font-size: 32pt; font-family: Courier;')
tree.show()
sys.exit(app.exec_())
示例5通过主窗口: 编辑#2 我刚刚在另一台机器(OSX)上运行了这些示例代码。令我惊讶的是,代码运行正常,标题字体设置正确。有趣的是,它在一台Mac上工作而在另一台上不工作的原因是什么?这可能是一个
sip
问题吗?Qt版本?PyQt版本?以下是截图:

假设您希望整个页眉的字体相同,您应该能够执行以下操作:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
mainWindow=QtGui.QMainWindow()
mainWidget=QtGui.QWidget()
mainWindow.setCentralWidget(mainWidget)
mainLayout = QtGui.QVBoxLayout()
mainWidget.setLayout(mainLayout)
mainWindow.setStyleSheet('QWidget { font: bold italic large "Times New Roman" }')
tree=QtGui.QTreeWidget()
tree.setHeaderLabels(['One','Two','Tree','Four','Five'])
mainLayout.addWidget(tree)
mainWindow.show()
sys.exit(app.exec_())

可能只需使用QS即可:


QTreeWidget
列标题字体绝对可调。

对于那些从遥远的反乌托邦未来来到这里的人来说,最明智的方法是在与应用程序的
QMainWindow
小部件相关联的样式表中设置
QHeaderView::section
选择器的样式。这种方法合理地将所有样式集中到一个样式表中,并允许在Qt(Creator | Designer)中即时预览这些样式

…呜呜? 具体来说,假设Qt(创建者|设计者):

  • 右键单击应用程序对象树视图中的
    QMainWindow
    小部件
  • 左键单击更改样式表。。。菜单项
  • 复制并粘贴以下QS:

    tree.header().setFont(font)
    
  • 单击“确定”

瞧!Qt样式表(QS)功能强大得不可思议。通常,它们是以跨平台和向前兼容的方式完成给定美学任务的唯一手段。。。事实上,这很糟糕

最后请注意,在这种情况下,上面的
QTreeWidget
父选择器在技术上是可选的,但允许对单个树小部件而不是所有树小部件进行样式设置(例如,
QTreeWidget#muh_小部件QHeaderView::section
,为具有对象名
muh_小部件的单个树小部件设置列标题样式)

告诉我更多,好先生! 很高兴,善良的绅士。另见:

  • 这个
  • 这个

我也尝试了
tree.header().setFont(font)
。不起作用。有趣的是,它在我的系统上起作用。您使用的是什么版本的Qt?什么操作系统?平台:OSX。QtCore.PYQT_VERSION_STR:VERSION:4.10.4-snapshot-315a27c0f0a7Oh,我在Windows 7上,所以我无法真正看到您看到的内容。另外,我相信您已经尝试过了,但是您是否尝试过将点大小设置为非常大的值,例如20?在我的设置中,8看起来与默认大小大致相同。(如果这是一个愚蠢的建议,很抱歉。我想排除所有的可能性。)我刚刚发布了三个例子。它们都不起作用。我在互联网上搜索答案已经到了尽头。标题的字体可能不可自定义。您可以发布一个如何使用QSS更改标题字体属性的示例吗?请尝试QWidget{font:bold italic large“Times New Roman”}-验证这是否会更改标题字体。如果有,那么您只需要找到正确的小部件名称。我记得有人在寻找一些Qt小部件,因为它们没有您期望的名称。您还可以使用obj.setName(“某个名称”);在代码中,然后使用#some name{font..}(就像CSS)的QS,如下所示:
tree.header().setStyleSheet('QWidget{font:bold italic large“Times New Roman”}')
?我实际上设置了主窗口(因为QWidget是所有QT小部件的基础,它应该级联到所有小部件(包括标题))。有些东西是QSS无法修改的。QSS不能动态修改其他内容,而是要求您在应用程序启动时针对应用程序初始化QSS。。这是一个好主意,但由于它的一些行为,使用起来可能很笨拙。。希望它能起作用!这不起作用:
tree.header().setStyleSheet('QMainWindow{font:bold italic large“Times New Roman”}')
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
mainWindow=QtGui.QMainWindow()
mainWidget=QtGui.QWidget()
mainWindow.setCentralWidget(mainWidget)
mainLayout = QtGui.QVBoxLayout()
mainWidget.setLayout(mainLayout)
mainWindow.setStyleSheet('QWidget { font: bold italic large "Times New Roman" }')
tree=QtGui.QTreeWidget()
tree.setHeaderLabels(['One','Two','Tree','Four','Five'])
mainLayout.addWidget(tree)
mainWindow.show()
sys.exit(app.exec_())
tree.header().setFont(font)
QTreeWidget QHeaderView::section {
    font-size: 8pt;
}