主要是Pyside2
的相关文档太少了,不全且大部分是英文的,所以当时想要学习pyside2
开发gui的时候,研究的比较多,所以在这里做一个相关的总结。
请注意:这是Pyside2
,并不是PyQt
,虽然两者的语法差不多,都是python和qt开发ui,但是两者的组成是不一样的,Pyside2
是qt官方开发,PyQt
是第三方公司开发的,而且两者的调用函数还是有一定区别的。
因为这里需要是ui文件,所以开发的工具是Qt Creator
, python 环境是3.6.7。
由于Qt Creator
已经默认安装了 pyside2, 所以不需要手动进行安装,如果没有安装的小朋友,需要手动调用 pip3 install PySide2
的命令行手动进行安装。
本项目的所有演示代码:github
项目的创建步骤
项目的创建步骤:
1 创建空白Window 项目
1.1 点击New Project
-> Qt for Python - Window
-> choose...
1.2 填写项名称:
1.3 填写文件名:再点击下一步
1.4 继续点击完成。
1.5 修改 pymian.py 文件内容
```python
# This Python file uses the following encoding: utf-8
import sys
from PySide2.QtWidgets import QApplication, QMainWindow
class PyMain(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
if __name__ == "__main__":
app = QApplication([])
window = PyMain()
window.show()
sys.exit(app.exec_())
```
1.6 点击运行会出现 一个空白的window,说明基本配置成功。
2 开始创建ui文件。
2.1 右键主工程->点击 Add New…
2.2 选择 Qt Designer Form
2.3 选择Widget 并点击下一步
2.4 到我们这里创建了一个 名叫 formmain.ui 的文件
3 编辑ui文件
3.1 现在进入到 ui文件的编辑页面,随便往地面拖一个按钮和 textedit的控件,并加个约束
3.2. 保存后,我们能看见我们下载的目录结构是这样的
4 集成ui文件
4.1 我们现在需要做的是将ui文件集成到我们的代码中来。
由于我们使用的是动态加载ui文件,所以需要导入QUiLoader
类,添加导入
from PySide2.QtUiTools import QUiLoader
4.2 导入ui
#这里获取到formmain.ui 的绝对路径
path = os.path.join(os.path.dirname(__file__), "formmain.ui")
#将路径传入QUiLoader里面,第二个参数self代表是将PyMain作为ui文件的父控件来进行加载。
self.myWidget = QUiLoader().load(path, self);
在这里之所以不适用相对路径导入ui文件,是因为在我自己电脑上测试的时候,QUiLoader 根本找不到相对路径下的ui文件。
比如以下代码:
#case 1 -> 成功
# path = os.path.join(os.path.dirname(__file__), "formmain.ui")
# self.myWidget = QUiLoader().load(path, self);
#case 2 直接使用相对路径 -> 失败
# self.myWidget = QUiLoader().load("formmain.ui", self);
#case 3 添加 将ui文件添加到qrc文件后再导入ui文件 -> 失败
# from PySide2.QtCore import QFile
loader = QUiLoader()
file = QFile(":/forms/myform.ui")
file.open(QFile.ReadOnly)
myWidget = loader.load(file, self)
file.close()
case 2 和 case 3 均报同一个错误
QIODevice::read (QFile, ":\forms\myform.ui"): device not open
Designer: An error has occurred while reading the UI file at line 1, column 0: Premature end of document.
5 最终效果
最后会运行出 一个这样的window:
所有代码:
# This Python file uses the following encoding: utf-8
import sys, os
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QMainWindow
class PyMain(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
#这里获取到formmain.ui 的绝对路径
path = os.path.join(os.path.dirname(__file__), "formmain.ui")
#将路径传入QUiLoader里面,第二个参数self代表是将PyMain作为ui文件的父控件来进行加载。
self.myWidget = QUiLoader().load(path, self);
if __name__ == "__main__":
app = QApplication([])
window = PyMain()
window.show()
sys.exit(app.exec_())
最后在说一遍,本项目的所有演示代码都可以在这里下载:github
其他章节:
Pyside2 学习系列一:创建包含ui文件的项目 (超详细的Pyside2 攻略)
Pyside2 学习系列二:PyInstaller打包项目exe (超详细的Pyside2 攻略)
Pyside2 学习系列三:PyInstaller打包项目瘦身(超详细的Pyside2 攻略)