【桌面应用开发】Qt Designer UI文件转Python文件与主程序关联实战示例

我将通过一个简单的示例,详细说明如何将 Qt Designer 设计的 .ui 文件转换成 .py 文件,并最终与 Python 主程序 关联,实现界面与逻辑的交互。


1. 示例目标

  • 使用 Qt Designer 设计一个简单的窗口(包含一个按钮和一个文本框)。
  • .ui 文件转换为 .py 文件(ui_mainwindow.py)。
  • 编写主程序 main.py,关联界面和逻辑(点击按钮时在文本框显示 “Hello, PyQt5!”)。

  • 2. 步骤详解

    (1) 使用 Qt Designer 设计界面

    1. 打开 Qt Designer(安装 PyQt5 后自带):
      designer
      
    2. 选择 “Main Window”,然后添加:
    3. 一个 QPushButton(按钮)
    4. 一个 QTextEdit(文本框)
    5. 保存为 mainwindow.ui(UI 文件)。

    (2) 将 .ui 文件转换为 .py 文件

    使用 pyuic5 工具(PyQt5 自带)转换:

    pyuic5 -x mainwindow.ui -o ui_mainwindow.py
    
  • -x:生成可单独运行的代码(可选)。
  • -o:指定输出文件名。
  • 生成的 ui_mainwindow.py 包含界面代码,但不要直接修改它(后续重新生成会覆盖)。


    (3) 编写主程序 main.py 关联逻辑

    import sys
    from PyQt5.QtWidgets import QMainWindow, QApplication
    from ui_mainwindow import Ui_MainWindow  # 导入生成的UI类
    
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            
            # 初始化UI(来自ui_mainwindow.py)
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
            
            # 关联按钮点击事件
            self.ui.pushButton.clicked.connect(self.on_button_click)
        
        def on_button_click(self):
            """按钮点击时在文本框显示文字"""
            self.ui.textEdit.setText("Hello, PyQt5!")
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    

    (4) 代码解析

    1. Ui_MainWindow

    2. ui_mainwindow.py 提供,负责界面布局。
    3. 通过 self.ui.setupUi(self) 加载界面。
    4. 信号与槽(Signal & Slot)

    5. self.ui.pushButton.clicked.connect(self.on_button_click)
      表示按钮点击时调用 on_button_click 方法。
    6. 主程序入口

    7. QApplication 管理应用,QMainWindow 是主窗口。
    8. app.exec_() 启动事件循环。

    3. 运行效果

    1. 执行主程序:
      python main.py
      
    2. 点击按钮后,文本框显示: Hello, PyQt5!

    4. 关键点总结

    步骤 说明
    Qt Designer 拖拽设计界面,保存为 .ui 文件。
    pyuic5 .ui 转换为 .pyui_mainwindow.py)。
    主程序 继承 QMainWindow,关联 Ui_MainWindow 并添加逻辑。
    信号与槽 .connect() 绑定事件(如按钮点击)。

    5. 扩展建议

  • 动态加载 .ui 文件(无需转换):
    from PyQt5.uic import loadUi
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
            loadUi("mainwindow.ui", self)  # 直接加载UI文件
    
  • 使用多窗口:创建多个 .ui 文件,分别关联不同逻辑类。
  • 如果有疑问,欢迎继续交流! 😊

    作者:Botiway

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【桌面应用开发】Qt Designer UI文件转Python文件与主程序关联实战示例

    发表回复