Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qt theme in pure qss

Qt theme in pure qss

Scheduled Pinned Locked Moved General and Desktop
qss
1 Posts 1 Posters 1.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    Plan C
    wrote on last edited by
    #1

    Qt Theme is a pure qss project that can easily improve the style of existing projects.

    Supports C++, PyQt5, PyQt6, PySide2, PySide6, and is published on GitHub Pages as WebAssembly.

    Preview

    Here is a demo of its use on Python, first install it:

    pip install QtTheme
    

    Alternatively, without installing QtTheme, you can export a single-style qrc resource package through the online website. Use RCC to add it to your project。

    Let AI write an UI for me as an style example:

    # Generated by ChatGPT
    import sys
    from PyQt5.QtCore import Qt
    from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QComboBox, QCheckBox, QRadioButton
    
    class MyWindow(QDialog):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("PyQt5 Widgets Example")
            self.setGeometry(100, 100, 400, 300)
    
            # Create layouts
            main_layout = QVBoxLayout()  # Vertical layout for the whole window
            form_layout = QVBoxLayout()  # Layout for the form
    
            # Add a QLabel and QLineEdit (text input)
            self.label = QLabel("Enter your name:", self)
            self.text_input = QLineEdit(self)
    
            form_layout.addWidget(self.label)
            form_layout.addWidget(self.text_input)
    
            # Add a QComboBox (dropdown)
            self.combo_label = QLabel("Select your favorite color:", self)
            self.combo_box = QComboBox(self)
            self.combo_box.addItems(["Red", "Green", "Blue", "Yellow"])
    
            form_layout.addWidget(self.combo_label)
            form_layout.addWidget(self.combo_box)
    
            # Add a QCheckBox
            self.check_box = QCheckBox("I agree to the terms and conditions", self)
    
            form_layout.addWidget(self.check_box)
    
            # Add a QRadioButton (grouped)
            self.radio_label = QLabel("Choose your preferred language:", self)
            self.radio_button_english = QRadioButton("English", self)
            self.radio_button_french = QRadioButton("French", self)
            self.radio_button_spanish = QRadioButton("Spanish", self)
    
            # Add the radio buttons to a horizontal layout
            radio_layout = QHBoxLayout()
            radio_layout.addWidget(self.radio_button_english)
            radio_layout.addWidget(self.radio_button_french)
            radio_layout.addWidget(self.radio_button_spanish)
    
            form_layout.addWidget(self.radio_label)
            form_layout.addLayout(radio_layout)
    
            # Add a QPushButton
            self.submit_button = QPushButton("Submit", self)
            self.submit_button.clicked.connect(self.on_button_click)
    
            # Add an exit button
            self.exit_button = QPushButton("Exit", self)
    
            button_layout = QHBoxLayout()
            button_layout.addWidget(self.submit_button)
            button_layout.addWidget(self.exit_button)
    
            # Add the form layout to the main layout
            main_layout.addLayout(form_layout)
            main_layout.addLayout(button_layout)
    
            # Set the window layout
            self.setLayout(main_layout)
    
        def on_button_click(self):
            name = self.text_input.text()
            favorite_color = self.combo_box.currentText()
            is_agree = self.check_box.isChecked()
            preferred_language = "None"
    
            if self.radio_button_english.isChecked():
                preferred_language = "English"
            elif self.radio_button_french.isChecked():
                preferred_language = "French"
            elif self.radio_button_spanish.isChecked():
                preferred_language = "Spanish"
    
            print(f"Name: {name}")
            print(f"Favorite Color: {favorite_color}")
            print(f"Agreed to Terms: {is_agree}")
            print(f"Preferred Language: {preferred_language}")
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = MyWindow()
        window.show()
        sys.exit(app.exec_())
    

    try to run it:

    native ui

    Import QtTheme, then read and set the style for the root widget through the Qt resource system:

    import QtTheme.PyQt5
    from PyQt5.QtCore import QFile
    
    class MyWindow(QDialog):
        def __init__(self):
            # ...
            qss = QFile(":/QtTheme/theme/Flat/Dark/Blue/Pink.qss")
            qss.open(QFile.OpenModeFlag.ReadOnly)
            self.setStyleSheet(qss.readAll().data().decode())
    

    basecolor dark

    Finally, set the color for the widgets through QWidget.setProperty as needed:

    class MyWindow(QDialog):
        def __init__(self):
            # ...
            qss = QFile(":/QtTheme/theme/Flat/Dark/Blue/Pink.qss")
            qss.open(QFile.OpenModeFlag.ReadOnly)
            self.setStyleSheet(qss.readAll().data().decode())
    
            self.submit_button.setProperty("Color", "Primary")
            self.exit_button.setProperty("Color", "Danger")
    

    widgets with color

    1 Reply Last reply
    0
    • P Plan C marked this topic as a regular topic on

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved