【发布时间】:2011-02-26 10:03:05
【问题描述】:
我想更改 PyQt 应用程序的 QStyle::PM_TabBarTabHSpace 属性。我阅读了Qt document for QStyle,但我不确定如何在 PyQt 中正确设置它。
非工作代码:
style = QStyleFactory.create('Cleanlooks')
style.PM_TabBarTabHSpace = 5 # 5 pixels?
app.setStyle(style)
此代码运行,但不会更改标签栏选项卡上的填充。我尝试使用样式表来更改标签栏填充,但这会破坏图形绘制,因此不会绘制任何默认外观的东西(我不想重新实现所有的 ui 绘制)。
我想我可能需要使用QProxyStyle,但我找不到任何关于如何在 PyQt4 中使用它的示例。 编辑: 看来 PyQt 没有 QProxyStyle,因为 from PyQt4.QtGui import QProxyStyle 失败了。
有人可以发布一个更改PM_TabBarTabHSpace 值的示例吗?谢谢。
编辑这是一个骨架代码。更改 PM_TabBarTabHSpace 值不会做任何事情。 :(
from PyQt4.QtGui import (QApplication, QTabWidget, QWidget,
QStyle, QStyleFactory)
def myPixelMetric(self, option=None, widget=None):
if option == QStyle.PM_TabBarTabHSpace:
return 200 # pixels
else:
return QStyle.pixelMetric(option, widget)
style = QStyleFactory.create('Windows')
style.pixelMetric = myPixelMetric
app = QApplication('test -style Cleanlooks'.split())
# Override style
app.setStyle(style)
tab = QTabWidget()
tab.addTab(QWidget(), 'one')
tab.addTab(QWidget(), 'two')
tab.show()
app.exec_()
【问题讨论】:
-
我已经阅读了文档,但我仍然不确定如何设置
PM_TabBarTabHSpace。你能举个例子吗? -
另外,文档只提供 C 示例,没有 Python 示例。这必须在 C 中完成吗?
-
我不太了解 Python,但我几乎可以肯定问题出在您覆盖 style.pixelMetric 的方式上。我不认为 Qt 调用了您对 pixelMetric 的实现。您是否尝试过从 QStyle 派生并在派生类中提供 pixelMetric 实现?
-
另外,
style.PM_TabBarTabHSpace = 5sn-p 不能工作,因为 QStyle 没有公共属性“PM_TabBarTabHSpace”。您尝试覆盖 pixelMetric 的第二个代码 sn-p 是正确的方法。