如何更改PyQt4中的QStyle属性?

时间:2011-02-26 10:03:05

标签: qt pyqt pyqt4

我想更改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_()

1 个答案:

答案 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。