qstylizer

qstylizer is a Qt stylesheet builder utility for PyQt4, PyQt5, PySide and PySide2.

Introduction

qstylizer is a python package designed to help with the construction of Qt stylesheets.

The typical way of setting a stylesheet in PyQt is like this:

widget = QtWidgets.QWidget()
widget.setStyleSheet("""
    QTabBar {
        border-radius: 3px;
        background-color: green;
    }
    QTabBar:focus {
        border: 0px transparent black;
        background-color: red;
    }
    QTabBar::close-button {
        background: transparent;
    }
""")

This approach floods the python code with ugly multi-line strings everywhere.

The qstylizer way:

import qstylizer.style

css = qstylizer.style.StyleSheet()
css.QTabBar.setValues(
    borderRadius="3px",
    backgroundColor="green"
)
css.QTabBar.focus.setValues(
    border="0px transparent black",
    backgroundColor="red"
)
css.QTabBar.closeButton.background.setValue("transparent")

widget = QtWidgets.QMainWindow()
widget.setStyleSheet(css.toString())

qstylizer stores style rule objects in a dictionary hierarchy.

The above example maps to this hierarchy:

<StyleSheet dict={
    "QTabBar": <ClassRule name="QTabBar" dict={
        "border-radius": <PropRule name="border-radius" value="3px" />,
        "background-color": <PropRule name="background-color" value="green" />,
        "focus": <PseudoStateRule name="focus" dict={
            "border": <PropRule name="border" value="0px transparent black" />,
            "background-color": <PropRule name="background-color" value="red" />,
        } />
        "close-button": <SubControlRule name="close-button" dict={
            "background": <PropRule name="background" value="transparent" />,
        }/>
     } />
} />

A StyleRule object is basically just an ordered dictionary with the keys as the style rule property names and the values as the style rule property values. Any attempt to get a dictionary value in the instance will add a key and value into the dictionary (the style rule property:values).

If qstylizer incorrectly determines that close-button is a pseudostate instead of a subcontrol, the colons can be specified in the key:

css.QTabBar["::close-button"].background.setValue("transparent")

Because of the hierarchical nature, the following are all valid:

css.QTabBar.closeButton.background.setValue("transparent")
css["QTabBar"].closeButton.background.setValue("transparent")
css["QTabBar"]["close-button"].background.setValue("transparent")
css["QTabBar"]["close-button"]["background"].setValue("transparent")
css["QTabBar"]["::close-button"]["background"].setValue("transparent")
css["QTabBar::close-button"].background.setValue("transparent")
css["QTabBar::close-button"]["background"].setValue("transparent")

How Does it Work?

How does qstylizer determine what is a QClass, subcontrol, or pseudostate? The package itself stores a list of known options for each type.

>>> qstylizer.style.rule_class("QTabBar")
<class 'qstylizer.style.ClassRule'>
>>> qstylizer.style.rule_class("close-button")
<class 'qstylizer.style.SubControlRule'>
>>> qstylizer.style.rule_class("hover")
<class 'qstylizer.style.PseudoStateRule'>

Advantages

What are the advantages? Ease of use and cleaner code. There is no need to worry about scope operators, brackets, and semi-colons.

Tutorial

Creating a StyleSheet

To create a stylesheet, create a qstylizer.style.StyleSheet instance.

>>> import qstylizer.style
>>> css = qstylizer.style.StyleSheet()

To add global properties, simply start setting values for any attribute.

>>> css.color.setValue("green")
>>> css.border.setValue("1px solid red")
>>> print(css.toString())
color: green;
border: 1px solid red;

Here is how to create a style rule for QTabBar::close-button and set the background property to transparent:

>>> css.QTabBar.closeButton.background.setValue("transparent")
>>> print(css.toString())
* {
    color: green;
    border: 1px solid red;
}
QTabBar::close-button {
    background: transparent;
}

There are actually multiple ways to set a property value. All of the following statements below are equivalent and valid. Take your pick.

>>> css.QTabBar.closeButton.background.setValue("transparent")
>>> css["QTabBar"].closeButton.background.setValue("transparent")
>>> css["QTabBar"]["close-button"].background.setValue("transparent")
>>> css["QTabBar"]["close-button"]["background"].setValue("transparent")
>>> css["QTabBar"]["::close-button"]["background"].setValue("transparent")
>>> css["QTabBar::close-button"].background.setValue("transparent")
>>> css["QTabBar::close-button"]["background"].setValue("transparent")

Global scope vs “* {}”

Adding a sub-style rule will result in a different syntax for the global property values:

>>> css.color.setValue("green")
>>> css.border.setValue("1px solid red")
>>> print(css.toString())
color: green;
border: 1px solid red;

>>> css.QWidget.backgroundColor.setValue("blue")
>>> print(css.toString())
* {
    color: green;
    border: 1px solid red;
}
QWidget {
    background-color: blue;
}

Unknown Property Names

Any name can be used as an attribute with the use of strings and brackets.

>>> css = qstylizer.style.StyleSheet()
>>> css["QUnknownClass::unknown-subcontrol"]["unknown-prop"].setValue("none")
>>> print(css.toString())
QUnknownClass::unknown-subcontrol {
    unknown-prop: none;
}

Not Operator (!)

Here is an example of how to use the ! operator:

css.QTabBar["!focus"].background.setValue("none")

Object Property

Here is an example of how to set an object property style rule:

css['QLineEdit[echoMode="2"]'].background.setValue("none")

Parser

An existing stylesheet can be converted to a StyleSheet instance as a starting point. This is handy if you need to change property values in an existing template stylesheet.

>>> import qstylizer.parser
>>> stylesheet = """
... QTabBar {
...     border-radius: 3px;
...     background-color: green;
... }
... QTabBar:focus {
...     border: 0px transparent black;
...     background-color: red;
... }
... QTabBar::close-button {
...     background: transparent;
... }
... """
>>> css = qstylizer.parser.parse(stylesheet)
>>> print(css.QTabBar.focus.toString())
QTabBar:focus {
    border: 0px transparent black;
    background-color: red;
}

String Output

The qstylizer.style.StyleRule.toString() function call with no parameters will just output the property:values of that style rule in css format. The qstylizer.style.StyleRule.toString(recursive=True) function call will output the style rule and all of the sub-style rules in its hierarchy.

>>> print(css.QTabBar.toString())
QTabBar {
    border-radius: 3px;
    background-color: green;
}
>>> print(css.QTabBar.toString(recursive=True))
QTabBar {
    border-radius: 3px;
    background-color: green;
}
QTabBar:focus {
    border: 0px transparent black;
    background-color: red;
}
QTabBar::close-button {
    background: transparent;
}

API Reference

qstylizer

qstylizer.descriptor

qstylizer.descriptor.prop

class qstylizer.descriptor.prop.PropDescriptor(name)[source]

Property descriptor.

rule_cls
class qstylizer.descriptor.prop.PropParent[source]

Property setter.

Contains descriptors for all known properties.

qtBackgroundRole

Property descriptor.

qtBlockIndent

Property descriptor.

qtLineHeightType

Property descriptor.

qtListIndent

Property descriptor.

qtListNumberPrefix

Property descriptor.

qtListNumberSuffix

Property descriptor.

qtParagraphType

Property descriptor.

qtStyleFeatures

Property descriptor.

qtTableType

Property descriptor.

qtUserState

Property descriptor.

alternateBackgroundColor

Property descriptor.

alignment

Property descriptor.

background

Property descriptor.

backgroundAttachment

Property descriptor.

backgroundClip

Property descriptor.

backgroundColor

Property descriptor.

backgroundImage

Property descriptor.

backgroundOrigin

Property descriptor.

backgroundPosition

Property descriptor.

backgroundRepeat

Property descriptor.

border

Property descriptor.

borderBottom

Property descriptor.

borderBottomColor

Property descriptor.

borderBottomLeftRadius

Property descriptor.

borderBottomRightRadius

Property descriptor.

borderBottomStyle

Property descriptor.

borderBottomWidth

Property descriptor.

borderColor

Property descriptor.

borderImage

Property descriptor.

borderLeft

Property descriptor.

borderLeftColor

Property descriptor.

borderLeftStyle

Property descriptor.

borderLeftWidth

Property descriptor.

borderRadius

Property descriptor.

borderRight

Property descriptor.

borderRightColor

Property descriptor.

borderRightStyle

Property descriptor.

borderRightWidth

Property descriptor.

borderStyle

Property descriptor.

borderTop

Property descriptor.

borderTopColor

Property descriptor.

borderTopLeftRadius

Property descriptor.

borderTopRightRadius

Property descriptor.

borderTopStyle

Property descriptor.

borderTopWidth

Property descriptor.

borderWidth

Property descriptor.

color

Property descriptor.

comboboxPopup

Property descriptor.

float

Property descriptor.

font

Property descriptor.

fontFamily

Property descriptor.

fontSize

Property descriptor.

fontStyle

Property descriptor.

fontVariant

Property descriptor.

fontWeight

Property descriptor.

height

Property descriptor.

iconSize

Property descriptor.

image

Property descriptor.

imagePosition

Property descriptor.

lineHeight

Property descriptor.

listStyle

Property descriptor.

listStyleType

Property descriptor.

margin

Property descriptor.

marginBottom

Property descriptor.

marginLeft

Property descriptor.

marginRight

Property descriptor.

marginTop

Property descriptor.

maxHeight

Property descriptor.

maxWidth

Property descriptor.

minHeight

Property descriptor.

minWidth

Property descriptor.

outline

Property descriptor.

outlineBottomLeftRadius

Property descriptor.

outlineBottomRightRadius

Property descriptor.

outlineColor

Property descriptor.

outlineOffset

Property descriptor.

outlineRadius

Property descriptor.

outlineStyle

Property descriptor.

outlineTopLeftRadius

Property descriptor.

outlineTopRightRadius

Property descriptor.

outlineWidth

Property descriptor.

padding

Property descriptor.

paddingBottom

Property descriptor.

paddingLeft

Property descriptor.

paddingRight

Property descriptor.

paddingTop

Property descriptor.

pageBreakAfter

Property descriptor.

pageBreakBefore

Property descriptor.

position

Property descriptor.

selectionBackgroundColor

Property descriptor.

selectionColor

Property descriptor.

showDecorationSelected

Property descriptor.

spacing

Property descriptor.

subcontrolOrigin

Property descriptor.

subcontrolPosition

Property descriptor.

textAlign

Property descriptor.

textDecoration

Property descriptor.

textIndent

Property descriptor.

textTransform

Property descriptor.

textUnderlineStyle

Property descriptor.

verticalAlign

Property descriptor.

whiteSpace

Property descriptor.

width

Property descriptor.

qstylizer.descriptor.pseudoprop

class qstylizer.descriptor.pseudoprop.PseudoPropDescriptor(name)[source]

Pseudo-property descriptor.

rule_cls
class qstylizer.descriptor.pseudoprop.PseudoPropParent[source]

Pseudo-property setter.

Contains descriptors for all known pseudo-properties.

left

Pseudo-property descriptor.

right

Pseudo-property descriptor.

top

Pseudo-property descriptor.

bottom

Pseudo-property descriptor.

qstylizer.descriptor.pseudostate

class qstylizer.descriptor.pseudostate.PseudoStateDescriptor(name)[source]

Pseudo-state descriptor.

rule_cls
class qstylizer.descriptor.pseudostate.PseudoStateParent[source]

Pseudostate setter.

Contains descriptors for all known pseudostates.

active

Pseudo-state descriptor.

adjoinsItem

Pseudo-state descriptor.

alternate

Pseudo-state descriptor.

checked

Pseudo-state descriptor.

closable

Pseudo-state descriptor.

closed

Pseudo-state descriptor.

default

Pseudo-state descriptor.

disabled

Pseudo-state descriptor.

editFocus

Pseudo-state descriptor.

editable

Pseudo-state descriptor.

enabled

Pseudo-state descriptor.

exclusive

Pseudo-state descriptor.

first

Pseudo-state descriptor.

flat

Pseudo-state descriptor.

floatable

Pseudo-state descriptor.

focus

Pseudo-state descriptor.

hasChildren

Pseudo-state descriptor.

hasSiblings

Pseudo-state descriptor.

horizontal

Pseudo-state descriptor.

hover

Pseudo-state descriptor.

indeterminate

Pseudo-state descriptor.

last

Pseudo-state descriptor.

maximized

Pseudo-state descriptor.

middle

Pseudo-state descriptor.

minimized

Pseudo-state descriptor.

movable

Pseudo-state descriptor.

nextSelected

Pseudo-state descriptor.

noFrame

Pseudo-state descriptor.

nonExclusive

Pseudo-state descriptor.

off

Pseudo-state descriptor.

on

Pseudo-state descriptor.

onlyOne

Pseudo-state descriptor.

open

Pseudo-state descriptor.

pressed

Pseudo-state descriptor.

previousSelected

Pseudo-state descriptor.

readOnly

Pseudo-state descriptor.

selected

Pseudo-state descriptor.

unchecked

Pseudo-state descriptor.

vertical

Pseudo-state descriptor.

window

Pseudo-state descriptor.

qstylizer.descriptor.qclass

class qstylizer.descriptor.qclass.ClassStyleDescriptor(name)[source]

QClass descriptor.

rule_cls
class qstylizer.descriptor.qclass.ClassStyleParent[source]

QClass setter.

Contains descriptors for all known QClasses.

QAbstractScrollArea

QClass descriptor.

QCheckBox

QClass descriptor.

QColumnView

QClass descriptor.

QComboBox

QClass descriptor.

QDateEdit

QClass descriptor.

QDateTimeEdit

QClass descriptor.

QDialog

QClass descriptor.

QDialogButtonBox

QClass descriptor.

QDockWidget

QClass descriptor.

QDoubleSpinBox

QClass descriptor.

QFrame

QClass descriptor.

QGroupBox

QClass descriptor.

QHeaderView

QClass descriptor.

QLabel

QClass descriptor.

QLineEdit

QClass descriptor.

QListView

QClass descriptor.

QListWidget

QClass descriptor.

QMainWindow

QClass descriptor.

QMenu

QClass descriptor.

QMenuBar

QClass descriptor.

QMessageBox

QClass descriptor.

QPlainTextEdit

QClass descriptor.

QProgressBar

QClass descriptor.

QPushButton

QClass descriptor.

QRadioButton

QClass descriptor.

QScrollArea

QClass descriptor.

QScrollBar

QClass descriptor.

QSizeGrip

QClass descriptor.

QSlider

QClass descriptor.

QSpinBox

QClass descriptor.

QSplitter

QClass descriptor.

QStatusBar

QClass descriptor.

QTabBar

QClass descriptor.

QTabWidget

QClass descriptor.

QTableView

QClass descriptor.

QTableWidget

QClass descriptor.

QTextBrowser

QClass descriptor.

QTextEdit

QClass descriptor.

QTimeEdit

QClass descriptor.

QToolBar

QClass descriptor.

QToolButton

QClass descriptor.

QToolBox

QClass descriptor.

QToolTip

QClass descriptor.

QTreeView

QClass descriptor.

QTreeWidget

QClass descriptor.

QWidget

QClass descriptor.

qstylizer.descriptor.stylerule

class qstylizer.descriptor.stylerule.StyleRuleDescriptor(name)[source]

StyleRule descriptor.

__init__(name)[source]

Initialize the StyleRuleDescriptor instance.

Parameters:name – The attribute name of type string
rule_cls
class qstylizer.descriptor.stylerule.StyleRuleParent[source]

StyleRule descriptor.

Contains functions for getting all known attributes of the StyleRule.

classmethod get_attributes()[source]

Get all of the settable attributes of the StyleRule.

Loop through all base classes to gather all known attributes. Returns a dictionary with the attribute name as the key and descriptor as the value.

classmethod get_attr_options()[source]

Get all of the attribute names of the StyleRule.

Returns a set of all possible dashcase attribute names.

qstylizer.descriptor.subcontrol

class qstylizer.descriptor.subcontrol.SubControlDescriptor(name)[source]

Subcontrol descriptor.

rule_cls
class qstylizer.descriptor.subcontrol.SubControlParent[source]

Subcontrol setter.

Contains descriptors for all known subcontrols.

addLine

Subcontrol descriptor.

addPage

Subcontrol descriptor.

branch

Subcontrol descriptor.

chunk

Subcontrol descriptor.

closeButton

Subcontrol descriptor.

corner

Subcontrol descriptor.

downArrow

Subcontrol descriptor.

downButton

Subcontrol descriptor.

dropDown

Subcontrol descriptor.

floatButton

Subcontrol descriptor.

groove

Subcontrol descriptor.

indicator

Subcontrol descriptor.

handle

Subcontrol descriptor.

icon

Subcontrol descriptor.

item

Subcontrol descriptor.

leftArrow

Subcontrol descriptor.

leftCorner

Subcontrol descriptor.

menuArrow

Subcontrol descriptor.

menuButton

Subcontrol descriptor.

menuIndicator

Subcontrol descriptor.

rightArrow

Subcontrol descriptor.

pane

Subcontrol descriptor.

rightCorner

Subcontrol descriptor.

scroller

Subcontrol descriptor.

section

Subcontrol descriptor.

separator

Subcontrol descriptor.

subLine

Subcontrol descriptor.

subPage

Subcontrol descriptor.

tab

Subcontrol descriptor.

tabBar

Subcontrol descriptor.

tear

Subcontrol descriptor.

tearoff

Subcontrol descriptor.

text

Subcontrol descriptor.

title

Subcontrol descriptor.

upArrow

Subcontrol descriptor.

upButton

Subcontrol descriptor.

qstylizer.parser

qstylizer.style

Indices and tables