Как я могу изменить свойства QStyle в PyQt4? - PullRequest
4 голосов
/ 26 февраля 2011

Я бы хотел изменить свойство QStyle::PM_TabBarTabHSpace для приложения PyQt. Я прочитал документ Qt для QStyle , но я не уверен, как правильно установить это в PyQt.

Нерабочий код:

style = QStyleFactory.create('Cleanlooks')
style.PM_TabBarTabHSpace = 5  # 5 pixels?
app.setStyle(style)

Этот код выполняется, но он не меняет отступы на вкладках панели вкладок. Я пытался использовать таблицы стилей для изменения отступов панели вкладок, но это разрушает графический рисунок, так что ничто из стандартного внешнего вида не прорисовывается (я не хочу переопределять весь рисунок пользовательского интерфейса).

Я думаю, что мне может понадобиться использовать 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 Ответ

4 голосов
/ 18 марта 2014

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())

Этот фрагмент кода будет работать, но он уродлив.Я предпочитаю использовать таблицы стилей, чем манипулировать стилем.

...