在 PyQt 或 PySide 中,加載 Qt Designer 生成的 .ui
文件有兩種常見方法:
- 使用
pyuic
將.ui
文件轉換為 Python 代碼。 - 動態加載
.ui
文件。
以下是兩種方法的詳細說明和示例代碼。
方法 1:使用 pyuic
將 .ui
文件轉換為 Python 代碼
步驟
-
使用 Qt Designer 創建并保存
.ui
文件(如main_window.ui
)。 -
使用
pyuic5
工具將.ui
文件轉換為 Python 代碼:pyuic5 main_window.ui -o ui_main_window.py
這會生成一個
ui_main_window.py
文件,其中包含 UI 的 Python 代碼。 -
在代碼中導入生成的 UI 類并繼承它。
示例代碼
假設生成的 UI 類名為 Ui_MainWindow
:
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui_main_window import Ui_MainWindow # 導入生成的 UI 類class MainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self) # 初始化 UIif __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec_()
方法 2:動態加載 .ui
文件
步驟
- 使用 Qt Designer 創建并保存
.ui
文件(如main_window.ui
)。 - 使用
PyQt5.uic.loadUi
或PySide2.uic.loadUi
動態加載.ui
文件。
示例代碼
使用 PyQt5
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication, QMainWindowclass MainWindow(QMainWindow):def __init__(self):super().__init__()loadUi("main_window.ui", self) # 動態加載 UI 文件if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec_()
使用 PySide2
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.uic import loadUiclass MainWindow(QMainWindow):def __init__(self):super().__init__()loadUi("main_window.ui", self) # 動態加載 UI 文件if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec_()
兩種方法的對比
方法 | 優點 | 缺點 |
---|---|---|
pyuic 轉換 | - 代碼直接嵌入 Python 文件,便于調試和修改。 - 性能稍高。 | - 每次修改 .ui 文件后需要重新生成 Python 代碼。 |
動態加載 .ui 文件 | - 無需生成額外的 Python 文件,直接加載 .ui 文件。- 更靈活。 | - 運行時加載,性能稍低。 - 調試時無法直接查看 UI 的 Python 代碼。 |
動態加載 .ui
文件的進階用法
1. 加載到自定義控件
你可以將 .ui
文件加載到一個自定義控件中,而不是主窗口。例如:
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QWidgetclass CustomWidget(QWidget):def __init__(self):super().__init__()loadUi("custom_widget.ui", self) # 加載到自定義控件
2. 加載到布局中
你可以將 .ui
文件加載到一個布局中,然后將其添加到主窗口:
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QVBoxLayout, QWidgetclass MainWindow(QWidget):def __init__(self):super().__init__()layout = QVBoxLayout(self)custom_widget = QWidget()loadUi("custom_widget.ui", custom_widget) # 加載到布局layout.addWidget(custom_widget)
總結
pyuic
轉換:適合需要直接修改 UI 代碼的場景。- 動態加載
.ui
文件:適合需要快速開發和動態加載的場景。
根據項目需求選擇合適的方法即可。