杰瑞科技汇

QtDesigner如何与Python结合使用?

核心概念:它们各自扮演什么角色?

它们分工明确,各司其职:

QtDesigner如何与Python结合使用?-图1
(图片来源网络,侵删)
  1. Qt Designer (UI 设计师)

    • 角色: 界面设计器,这是一个可视化的工具,让你像画图一样,通过拖拽控件(如按钮、文本框、菜单栏等)来创建用户界面。
    • 产出物: 它不生成 Python 代码,而是生成一个 .ui 文件,这个 .ui 文件是一个 XML 格式的文件,它描述了你的界面长什么样,有哪些控件,它们的位置、大小、属性等。
    • 优点:
      • 所见即所得: 设计界面非常直观,无需关心复杂的布局代码。
      • 关注点分离: 界面设计(UI)和程序逻辑(Logic)被分开,设计师可以专注于 .ui 文件,而程序员可以专注于 Python 代码。
      • 快速原型: 可以快速搭建出界面原型,方便讨论和修改。
  2. Python (程序员)

    • 角色: 逻辑实现者,你使用 Python 编写程序,实现界面的功能,
      • 当用户点击按钮时,执行什么操作。
      • 如何从文本框中读取数据。
      • 如何将数据显示在表格中。
      • 如何处理文件、网络请求等后台任务。
    • 工作方式: Python 代码需要读取 Qt Designer 生成的 .ui 文件,并将其转换成 Python 可以理解和操作的界面对象,你再将事件处理函数(比如按钮点击的槽函数)连接到这些界面对象上。

协同工作流程

整个过程可以概括为以下几个步骤:

  1. 设计界面: 使用 Qt Designer 创建界面,保存为 .ui 文件(my_window.ui)。
  2. 转换/加载 UI: 在 Python 代码中,使用 PyQtPySide 库提供的工具,将 .ui 文件转换成 Python 代码(.py 文件),或者直接在运行时加载 .ui 文件。
  3. 编写逻辑: 在 Python 代码中,编写业务逻辑,连接信号和槽。
  4. 运行程序: 执行 Python 脚本,即可看到你设计的界面,并与之交互。

核心桥梁:PyQt / PySide

要将 Qt Designer 和 Python 连接起来,你需要一个 Python 绑定库,最主流的两个选择是:

QtDesigner如何与Python结合使用?-图2
(图片来源网络,侵删)
  • PyQt5 / PyQt6: 由 Riverbank Computing 公司开发,功能强大,但商业使用需要购买许可证。
  • PySide2 / PySide6: 由 Qt 公司官方维护,与 Qt 的更新同步更快,并且使用 LGPL 许可证,对商业应用非常友好。PySide6 是目前推荐使用的最新版本。

推荐选择: 对于新项目,强烈推荐使用 PySide6


实战演练:创建你的第一个 Qt + Python 应用

我们将以 PySide6 为例,走完整个流程。

第 1 步:安装环境

你需要安装 Python 和 PySide6,打开你的终端或命令行工具,运行:

pip install PySide6

第 2 步:使用 Qt Designer 创建界面

  1. 启动 Qt Designer:

    QtDesigner如何与Python结合使用?-图3
    (图片来源网络,侵删)
    • 如果你通过 pip 安装了 PySide6,通常可以在命令行直接运行:
      pyside6-designer
    • 或者,如果你安装了完整的 Qt 开发工具,可以在开始菜单中找到它。
  2. 创建新窗口:

    • 启动后,选择 "Main Window" 并点击 "Create"。
    • 你会看到一个空的主窗口,左侧是 "Widget Box"(控件箱)。
  3. 拖拽控件:

    • 从 "Widget Box" 中拖拽一个 QPushButton(按钮)和一个 QLineEdit(单行文本框)到窗口中央。
    • 选中按钮,在右下角的 "Property Editor"(属性编辑器)中,将其 objectName 修改为 pushButton,将 text 修改为 "点击我"。
    • 选中文本框,将其 objectName 修改为 lineEdit
  4. 保存文件:

    • 点击 File -> Save As...,将文件保存为 main_window.ui

第 3 步:将 .ui 文件转换为 Python 代码(推荐方法)

有两种主流方法将 .ui 文件集成到 Python 项目中。

使用 pyside6-uic 工具进行预编译(推荐)

这种方法将 .ui 文件一次性转换成 .py 文件,程序运行时直接加载 Python 模块,效率更高。

  1. 转换 UI 文件: 在你的终端中,运行以下命令,将 main_window.ui 转换为 main_window_ui.py

    pyside6-uic main_window.ui -o main_window_ui.py
  2. 编写主程序 app.py 创建一个新的 Python 文件 app.py如下:

    import sys
    from PySide6.QtWidgets import QApplication, QMainWindow
    # 导入由 .ui 文件转换而来的 Python 模块
    from main_window_ui import Ui_MainWindow
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            # 设置由 .ui 文件生成的界面
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
            # --- 在这里连接信号和槽 ---
            # 将按钮的 clicked 信号连接到我们的 on_button_clicked 方法
            self.ui.pushButton.clicked.connect(self.on_button_clicked)
        def on_button_clicked(self):
            # 当按钮被点击时,执行此函数
            self.ui.lineEdit.setText("你好,Python世界!")
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec())
  3. 运行程序:

    python app.py

    你将看到一个窗口,里面有按钮和文本框,点击按钮,文本框的内容会发生变化。


在运行时动态加载 .ui 文件

这种方法不预编译,而是在程序运行时读取并解析 .ui 文件,更灵活,但启动时会有轻微的性能开销。

  1. 直接使用 main_window.ui 文件,无需转换。

  2. 编写主程序 app.py 这次我们使用 QUiLoader 来动态加载。

    import sys
    from PySide6.QtWidgets import QApplication, QMainWindow
    from PySide6.QtUiTools import QUiLoader
    class MainWindow(QMainWindow):
        def __init__(self, ui_file):
            super().__init__()
            # 使用 QUiLoader 加载 .ui 文件
            loader = QUiLoader()
            self.ui = loader.load(ui_file, self)
            if not self.ui:
                print("无法加载 UI 文件")
                sys.exit(-1)
            self.ui.setWindowTitle("动态加载示例")
            # --- 连接信号和槽 ---
            self.ui.pushButton.clicked.connect(self.on_button_clicked)
        def on_button_clicked(self):
            self.ui.lineEdit.setText("你好,动态加载!")
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        # 指定 .ui 文件的路径
        ui_file = "main_window.ui"
        window = MainWindow(ui_file)
        window.show()
        sys.exit(app.exec())
  3. 运行程序:

    python app.py

    效果与方法一完全相同。


总结与对比

特性 Qt Designer Python (PySide6)
功能 可视化设计界面 实现业务逻辑、数据处理、事件响应
产出 .ui (XML) 文件 .py (Python) 脚本
核心任务 拖拽控件、布局、设置属性 编写类、连接信号槽、编写槽函数
优点 直观、快速、关注点分离 强大、灵活、能实现任何复杂功能
关系 前端,负责“脸面” 后端,负责“大脑”

最佳实践:

  1. 始终使用 Qt Designer 设计界面,将设计师和程序员解放出来。
  2. 推荐使用 pyside6-uic 进行预编译,将 .ui 转换为 .py,以获得更好的性能。
  3. 在 Python 代码中,创建一个继承自 QMainWindow (或其他主窗口类) 的自定义类,将加载的 UI 对象作为该类的一个属性。
  4. 在类的 __init__ 方法中,完成所有信号和槽的连接。

通过这种方式,你可以构建出既美观又功能强大的桌面应用程序。

分享:
扫描分享到社交APP
上一篇
下一篇