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.
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¶
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.
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.
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.
Subcontrol descriptor.
Subcontrol descriptor.
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.
-