在 PyQt 或 PySide 中,加载 Qt Designer 生成的 .ui
文件有两种常见方法:
以下是两种方法的详细说明和示例代码。
uic__ui__Python__9">方法 1:使用 pyuic
将 .ui
文件转换为 Python 代码
步骤
-
使用
pyuic5
工具将.ui
文件转换为 Python 代码:pyuic5 main_window.ui -o ui_main_window.py
这会生成一个
ui_main_window.py
文件,其中包含 UI 的 Python 代码。 -
在代码中导入生成的 UI 类并继承它。
示例代码
假设生成的 UI 类名为 Ui_MainWindow
:
python">from PyQt5.QtWidgets import QApplication, QMainWindow
from ui_main_window import Ui_MainWindow # 导入生成的 UI 类class MainWindow(QMainWindow, Ui_MainWindow):def __init__(self):uiltin">super().__init__()self.setupUi(self) # 初始化 UIif __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec_()
ui__42">方法 2:动态加载 .ui
文件
步骤
示例代码
使用 PyQt5
python">from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication, QMainWindowclass MainWindow(QMainWindow):def __init__(self):uiltin">super().__init__()loadUi("main_window.ui", self) # 动态加载 UI 文件if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec_()
使用 PySide2
python">from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.uic import loadUiclass MainWindow(QMainWindow):def __init__(self):uiltin">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__95">动态加载 .ui
文件的进阶用法
1. 加载到自定义控件
你可以将 .ui
文件加载到一个自定义控件中,而不是主窗口。例如:
python">from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QWidgetclass CustomWidget(QWidget):def __init__(self):uiltin">super().__init__()loadUi("custom_widget.ui", self) # 加载到自定义控件
2. 加载到布局中
你可以将 .ui
文件加载到一个布局中,然后将其添加到主窗口:
python">from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QVBoxLayout, QWidgetclass MainWindow(QWidget):def __init__(self):uiltin">super().__init__()layout = QVBoxLayout(self)custom_widget = QWidget()loadUi("custom_widget.ui", custom_widget) # 加载到布局layout.addWidget(custom_widget)
总结
根据项目需求选择合适的方法即可。