【问题标题】:How to customize QTreeWidget header's font如何自定义 QTreeWidget 标头的字体
【发布时间】:2014-07-29 20:24:09
【问题描述】:

使用:

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:

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 上运行而在另一台 Mac 上运行不正常的原因可能是什么?会不会是sip 问题? Qt版本? PyQt 版本?这是屏幕截图:

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    假设您希望整个标题的字体相同,您应该可以这样做:

    tree.header().setFont(font)
    

    【讨论】:

    • 我也试过tree.header().setFont(font)。没用。
    • 有趣,它适用于我的系统。您使用的是什么版本的 Qt?什么操作系统?
    • 平台:OSX。 QtCore.PYQT_VERSION_STR:版本:4.10.4-snapshot-315a27c0f0a7
    • 哦,我使用的是 Windows 7,所以我无法真正看到您所看到的内容。另外,我确定您已经尝试过,但是您是否尝试过将磅值设置为非常大的值,例如 20?在我的设置中,8 看起来与默认大小大致相同。 (对不起,如果这是一个愚蠢的建议。就像排除所有可能性。)
    • 我刚刚发布了三个示例。它们都不起作用。我已经到了互联网谷歌搜索的尽头。可能标题的字体不可自定义。
    【解决方案2】:

    QTreeWidget 列标题字体绝对可调。

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

    ...wut?

    具体来说,假设 Qt (Creator|Designer):

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

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

    瞧! Qt 样式表 (QSS) 非常强大。很多时候,它们是唯一以跨平台和向前兼容的方式完成给定美学任务的方法。 ...实际上哪种很烂。

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

    告诉我更多,好先生!

    很高兴,善良的绅士。另见:

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 您能否发布一个关于如何使用 QSS 更改标题字体属性的示例?
      • 试试 QWidget { font: bold italic large "Times New Roman" } - 验证是否改变了标题字体。如果是这样,那么您只需要找到正确的小部件名称。我记得有人在寻找一些 Qt 小部件,因为它们没有您期望的名称。你也可以使用 obj.setName("some-name");在代码中,然后使用 #some-name { font .. } 的 QSS(就像 CSS 一样)
      • 像这样:tree.header().setStyleSheet('QWidget { font: bold italic large "Times New Roman" }') ?
      • 我实际上设置了 MainWindow(因为 QWidget 是所有 QT 小部件的基础,它应该级联到所有小部件(包括标题))。 QSS 无法修改某些内容。 QSS 不能即时修改其他内容,而是要求您在启动时针对应用程序初始化 QSS。这是一个好主意,但由于它具有的某些行为,使用起来可能很笨重。希望它会工作的!
      • 这不起作用:tree.header().setStyleSheet('QMainWindow { font: bold italic large "Times New Roman" }')
      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2013-12-28
      • 2015-05-29
      • 1970-01-01
      • 2011-01-04
      相关资源
      最近更新 更多