如何把GUI做的像Web一样美观:Python PyQt6特性介绍,如何结合QSS美化

发布于:2025-03-07 ⋅ 阅读:(18) ⋅ 点赞:(0)

PyQt6 特性介绍

PyQt6 是 Python 语言的一个 GUI 框架,基于 Qt 库开发。它允许开发者创建跨平台的桌面应用程序。以下是 PyQt6 的一些主要特性:

  1. 跨平台支持:PyQt6 支持 Windows、macOS、Linux 等多个操作系统。

  2. 丰富的控件库:PyQt6 提供了大量的 GUI 控件,如按钮、文本框、列表框、表格等。

  3. 强大的布局管理:PyQt6 提供了多种布局管理器(如 QVBoxLayout、QHBoxLayout、QGridLayout 等),帮助开发者轻松管理控件的位置和大小。

  4. 信号与槽机制:PyQt6 使用信号与槽机制来处理事件,使得事件处理更加灵活和高效。

  5. 多线程支持:PyQt6 支持多线程编程,允许开发者在后台执行耗时操作而不阻塞主线程。

  6. 国际化支持:PyQt6 提供了国际化支持,使得应用程序可以轻松地支持多种语言。

  7. OpenGL 集成:PyQt6 支持 OpenGL,允许开发者创建高性能的 3D 图形应用程序。

  8. 数据库支持:PyQt6 提供了对 SQL 数据库的支持,可以轻松地与数据库进行交互。

  9. Web 引擎集成:PyQt6 集成了 Qt WebEngine,允许开发者在应用程序中嵌入 Web 内容。

  10. 样式表支持:PyQt6 支持使用 CSS 样式表来定制控件的外观。

PyQt6 示例源码

以下是一个简单的 PyQt6 示例,展示了如何创建一个带有按钮和标签的窗口,并在点击按钮时更新标签的文本。

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 设置窗口标题
        self.setWindowTitle("PyQt6 示例")

        # 创建布局
        layout = QVBoxLayout()

        # 创建标签
        self.label = QLabel("点击按钮以更改文本")
        layout.addWidget(self.label)

        # 创建按钮
        self.button = QPushButton("点击我")
        self.button.clicked.connect(self.on_button_click)
        layout.addWidget(self.button)

        # 设置布局
        self.setLayout(layout)

    def on_button_click(self):
        # 更新标签文本
        self.label.setText("按钮被点击了!")

if __name__ == "__main__":
    # 创建应用程序对象
    app = QApplication(sys.argv)

    # 创建窗口对象
    window = MyWindow()

    # 显示窗口
    window.show()

    # 运行应用程序
    sys.exit(app.exec())

代码说明

  1. QApplication:PyQt6 应用程序的核心类,负责管理应用程序的控制流和主要设置。

  2. QWidget:所有用户界面对象的基类,窗口和控件都继承自 QWidget。

  3. QVBoxLayout:垂直布局管理器,用于将控件垂直排列。

  4. QPushButton:按钮控件,用户可以点击按钮触发事件。

  5. QLabel:标签控件,用于显示文本或图像。

  6. 信号与槽self.button.clicked.connect(self.on_button_click) 将按钮的点击信号连接到 on_button_click 槽函数,当按钮被点击时,槽函数会被调用。

运行示例

  1. 确保已安装 PyQt6:pip install PyQt6

  2. 将上述代码保存为 example.py 文件。

  3. 在终端或命令行中运行:python example.py

  4. 你将看到一个窗口,点击按钮后,标签的文本会更新。

这个示例展示了 PyQt6 的基本用法,包括创建窗口、添加控件、处理事件等。

PyQt6 支持使用 QSS(Qt Style Sheets) 来美化界面。QSS 的语法类似于 CSS,可以通过设置样式表来改变控件的外观(如颜色、字体、边框、背景等)。

以下是一个结合 QSS 美化 PyQt6 界面的示例代码:


示例代码:使用 QSS 美化 PyQt6 界面

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel

class StyledWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 设置窗口标题
        self.setWindowTitle("PyQt6 QSS 美化示例")

        # 设置窗口大小
        self.resize(300, 200)

        # 创建布局
        layout = QVBoxLayout()

        # 创建标签
        self.label = QLabel("这是一个标签")
        layout.addWidget(self.label)

        # 创建按钮
        self.button = QPushButton("点击我")
        self.button.clicked.connect(self.on_button_click)
        layout.addWidget(self.button)

        # 设置布局
        self.setLayout(layout)

        # 设置 QSS 样式表
        self.setStyleSheet("""
            QWidget {
                background-color: #f0f0f0;  /* 设置窗口背景颜色 */
                font-family: "微软雅黑";    /* 设置字体 */
                font-size: 14px;            /* 设置字体大小 */
            }
            QLabel {
                color: #333333;             /* 设置标签文字颜色 */
                font-size: 16px;            /* 设置标签字体大小 */
                font-weight: bold;          /* 设置标签字体加粗 */
            }
            QPushButton {
                background-color: #4CAF50;  /* 设置按钮背景颜色 */
                color: white;              /* 设置按钮文字颜色 */
                border-radius: 5px;         /* 设置按钮圆角 */
                padding: 10px;              /* 设置按钮内边距 */
                font-size: 14px;            /* 设置按钮字体大小 */
            }
            QPushButton:hover {
                background-color: #45a049;  /* 设置按钮悬停时的背景颜色 */
            }
            QPushButton:pressed {
                background-color: #3d8b40;  /* 设置按钮按下时的背景颜色 */
            }
        """)

    def on_button_click(self):
        # 更新标签文本
        self.label.setText("按钮被点击了!")

if __name__ == "__main__":
    # 创建应用程序对象
    app = QApplication(sys.argv)

    # 创建窗口对象
    window = StyledWindow()

    # 显示窗口
    window.show()

    # 运行应用程序
    sys.exit(app.exec())

代码说明

  1. QSS 样式表

    • 通过 setStyleSheet 方法为窗口和控件设置样式。

    • QSS 的语法类似于 CSS,支持选择器(如 QWidgetQLabelQPushButton)和伪状态(如 :hover:pressed)。

    • 可以设置背景颜色、字体、边框、圆角、内边距等属性。

  2. 样式表内容

    • QWidget:设置窗口的背景颜色和全局字体。

    • QLabel:设置标签的文字颜色、字体大小和加粗效果。

    • QPushButton:设置按钮的背景颜色、文字颜色、圆角、内边距等。

    • QPushButton:hover:设置按钮在鼠标悬停时的样式。

    • QPushButton:pressed:设置按钮在按下时的样式。

  3. 控件交互

    • 点击按钮后,标签的文本会更新。


运行效果

  1. 窗口背景为浅灰色,标签文字为深灰色且加粗。

  2. 按钮背景为绿色,文字为白色,带有圆角效果。

  3. 当鼠标悬停在按钮上时,按钮背景颜色会变深。

  4. 当按钮被按下时,按钮背景颜色会更深。


扩展:加载外部 QSS 文件

如果样式表内容较多,可以将 QSS 样式保存到外部文件中,然后在代码中加载。

  1. 创建一个 style.qss 文件,内容如下:

QWidget {
    background-color: #f0f0f0;
    font-family: "微软雅黑";
    font-size: 14px;
}
QLabel {
    color: #333333;
    font-size: 16px;
    font-weight: bold;
}
QPushButton {
    background-color: #4CAF50;
    color: white;
    border-radius: 5px;
    padding: 10px;
    font-size: 14px;
}
QPushButton:hover {
    background-color: #45a049;
}
QPushButton:pressed {
    background-color: #3d8b40;
}

在代码中加载外部 QSS 文件:

def load_stylesheet(filename):
    with open(filename, "r", encoding="utf-8") as f:
        return f.read()

class StyledWindow(QWidget):
    def __init__(self):
        super().__init__()
        # ...(其他代码)
        # 加载外部 QSS 文件
        self.setStyleSheet(load_stylesheet("style.qss"))

通过 QSS,可以轻松实现 PyQt6 界面的美化,同时保持代码的可维护性和灵活性。