PyQt5界面设计与逻辑分离
Posted 摸爬滚打的程序媛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt5界面设计与逻辑分离相关的知识,希望对你有一定的参考价值。
PyQt5界面设计与逻辑分离
前言
开发环境:PyCharm
界面设计:QtDesigner
使用QtDesigner来设计界面的时候,为了开发方便,往往需要将UI与逻辑处理分离,下面就介绍2种方式。
方法一(传统、不方便)
开发流程:
1、使用QtDesigner进行界面设计,保存为xxx.ui文件
2、在Pycharm中使用PyUIC生成xxx.py文件
3、新建.py文件,编写代码,调用生成的xxx.py文件
缺点: 一旦.ui界面更新,需要重新将.ui文件PyUic成.py文件
-
1、使用QtDesigner进行界面设计,保存为main_window.ui文件
-
2、在Pycharm中使用PyUIC生成main_window.py文件
-
3、新建main_window_control.py文件,编写代码,调用生成的xxx.py文件y
-
main_window_control.py代码如下:
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
import sys
# 从designer目录下的main_window.py文件中导入 “类 UiMainWindow”
from designer.main_window import Ui_main_window
# UI逻辑处理类
class ControlMainWindow(QMainWindow, Ui_main_window):
# 初始化函数
def __init__(self):
print("ControlMainWindow--> __init__()")
super().__init__()
# Ui_main_window类 初始化
super(ControlMainWindow, self)
# Ui_main_window类 调用setupUi()
self.setupUi(self)
# 按钮
self.pBtnSelectFile.clicked.connect(self.__selectFile)
# “选择文件”按钮
def __selectFile(self):
print("ControlMainWindow--> __selectFile()")
if __name__ == '__main__':
app = QApplication(sys.argv)
ui = ControlMainWindow()
# 主窗口标题
ui.setWindowTitle("摸爬滚打的程序媛--UI逻辑分离方法一")
ui.show()
sys.exit(app.exec_())
方法二(推荐、方便)
开发流程:
1、使用QtDesigner进行界面设计,保存为xxx.ui文件
2、 新建.py文件中,编写代码,直接调用xxx.ui文件
- 1、使用QtDesigner进行界面设计,保存为main_window.ui文件
- 2、 新建main_window.py文件中,编写代码,直接调用main_window.ui文件
- main_window.py代码如下:
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import uic
import sys
class CusMainWindow:
def __init__(self):
print("CusMainWindow--> __init__()")
# 从文件中加载UI定义
ui_path = "main_window.ui"
self.ui = uic.loadUi(ui_path)
print(type(self.ui)) # <class 'PyQt5.QtWidgets.QMainWindow'>
# 设置窗口标题
self.ui.setWindowTitle("摸爬滚打的程序媛--UI逻辑分离方法二")
# 初始化窗口里UI控件信号
self.ui.pBtnSelectFile.clicked.connect(self.selectFile)
# “选择文件”按钮
def selectFile(self):
print("CusMainWindow--> __selectFile()")
if __name__ == '__main__':
app = QApplication(sys.argv)
cusMainWin = CusMainWindow()
cusMainWin.ui.show()
app.exec_()
以上是关于PyQt5界面设计与逻辑分离的主要内容,如果未能解决你的问题,请参考以下文章