我想更改 QStyle::PM_TabBarTabHSpace
PyQt 应用程序的属性。我读了 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_()
最佳答案
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())
这段代码可以工作,但很难看。我更喜欢使用样式表而不是操作样式。
关于qt - 如何更改 PyQt4 中的 QStyle 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5126244/