如何自定义QTreeWidget标题的字体

时间:2014-07-29 20:24:10

标签: python pyqt

使用:

tree=QtGui.QTreeWidget()
tree.setHeaderLabels(['Column 1','Column 2','Column 3'])
tree.setColumnWidth(0, 48)  
tree.setColumnWidth(1, 48)  
tree.setColumnWidth(2, 48)  

QTreeWidget已创建。它的列标题是名称。并设置标题水平尺寸。

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

font = QtGui.QFont()
font.setPointSize(8)
tree.headerItem().setFont(0, font)

但是在这样的语法中使用.setFont对标题中使用的字体大小没有任何明显的影响。

我也尝试过:

tree.headerItem().setFont(0, font)
tree.headerItem().setFont(1, font)
tree.headerItem().setFont(2, font)

没有成功。用什么方法来自定义QTreeWidget列标题中使用的字体大小?

以后编辑:

示例1使列标题更大而不影响字体大小(?!):

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_())

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

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_())

示例3使用setHeaderItem。没有成功:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
tree=QtGui.QTreeWidget()

font=QtGui.QFont() 
font.setPointSize(36)
item=QtGui.QTreeWidgetItem()
item.setText(0,'Column name')
item.setFont(0,font)
tree.setHeaderItem(item)    
tree.show()
sys.exit(app.exec_())

示例5通过MAIN WINDOW:

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_())

编辑#2

我只是在另一台机器(OSX)上运行这些示例代码。令我惊讶的是代码正常工作,标题字体设置正确。有趣的是它在一台Mac上运行并且不能在另一台机器上工作的原因是什么?可能是sip问题吗? Qt版本? PyQt版本?这是截图: enter image description here enter image description here

3 个答案:

答案 0 :(得分:0)

假设您希望整个标题的字体相同,您应该能够:

tree.header().setFont(font)

答案 1 :(得分:0)

答案 2 :(得分:0)

QTreeWidget列标题字体绝对是可调的。

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

...会吗?

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

  • 在您的应用程序的 Object 树视图中右键单击QMainWindow小部件。
  • 左键单击 Change styleSheet ... 菜单项。
  • 复制并粘贴以下QSS:

    QTreeWidget QHeaderView::section {
        font-size: 8pt;
    }
    
  • 单击确定。

Voilà! Qt样式表(QSS)异常强大。通常,它们只是以跨平台和前向兼容的方式完成给定美学任务的 方法。 ...实际上哪一种烂。

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

告诉我更多,好先生!

很高兴,先生。另请参阅: