qt - 如何更改 PyQt4 中的 QStyle 属性?

标签 qt pyqt pyqt4

我想更改 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/

相关文章:

c++ - pthread_create 错误 :

c++ - 如何使用 find_package 通过 CMake 静态链接到许可的 Qt 库?

python - 在 QMessageBox 中显示 MySQL 错误

python - PyQt5-Python | QApplication.setStyle 不起作用

python - 在 Python 中使用 uic 将 .ui 文件转换为 .py 文件时出错

python - 如何在pyqt Qmenu中获取选定的项目

python - 如何在 PyQt4 中将图片添加到 QWidget

c++ - 重新实现调整大小事件

Qt QML : limit maximum FPS

python - 如何在带有繁忙指示器的 QProgressBar 上显示文本?