我想更改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_()
答案 0 :(得分:4)
QStyle.pixelMetric(...)是内置类方法。您无法通过功能指向设置。因为,它是在C代码中。您可以通过添加
来测试它def myPixelMetric(self, option=None, widget=None):
print 'Debug, i am calling'
...
你的myPixelmetric函数中的。您需要子类Style对象才能实现此目的。这是一个例子:
class MyStyle(QCommonStyle):
def pixelMetric(self, QStyle_PixelMetric, QStyleOption_option=None, QWidget_widget=None):
if QStyle_PixelMetric == QStyle.PM_TabBarTabHSpace:
return 200
else:
return QCommonStyle.pixelMetric(self, QStyle_PixelMetric, QStyleOption_option, QWidget_widget)
app = QApplication('test -style Cleanlooks'.split())
app.setStyle(MyStyle())
此代码段可以使用,但它很难看。我更喜欢使用样式表而不是操作Style。