1. 概述
前几天看到自己的同事用C#写了一个自动化办公的软件,看着他各种高效的演示,心里痒痒的不行。但是无奈不会C#啊,这时我又想到了强大的Python,经过查阅资料后,最终选择了Pyside2库。
但是苦苦折腾了将近一周的事件,Pysides2库还是没有装上,无论我用国内哪个镜像源,发现都无法用pip安装。国内常用镜像源:
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
- 中科大:https://pypi.mirrors.ustc.edu.cn/simple
- 豆瓣:https://pypi.douban.com/simple
最终只能选择离线安装,离线安装过程中发现缺少shiboken2的库,各种在线安装还是不行,最终继续离线安装。安装后发现版本号不对,重新卸载安装了一轮。最终今天中午终于安装成功,成功后迫不及待的找到一个程序运行,运行成功后,留下激动的泪水,但是马上发现换一个程序后,又报错,又是一顿查!最后终于全部问题解决。坎坷啊!
本文涵盖的内容包括解决以下问题:
1. 下载并安装Pyside2 库;
2. 下载并安装shiboken2库;
3. Pyside2环境变量配置;
4. 解决“Please destroy the QApplication singleton before creating a new QApplication instance.”问题
2. 下载并安装Pyside2
各种国内镜像源在线安装宣告失败后,无奈回到最初的安装方法。因为库文件大约又130M,因此直接取清华镜像源下载
网站:https://mirrors.tuna.tsinghua.edu.cn/
在该网站找到Pyside2库,明确了自己使用jupyter notebook中使用的python版本为3.8.5后,选择:
PySide2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl文件
下载过程中,发现异常网络连接中断(估计这就是为啥一直无法在线安装),手动点击继续下载后,即完成了下载!
然后prompt模式下,使用管理员权限打开后:
pip install PySide2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl
安装过程中,发现程序自动下载shiboken2,。当然又是安装不上
3. 下载并安装shiboken2
重新到清华镜像网站搜索不到这个库,只能取bing下搜索(真是强烈推介bing,百度太垃圾了!)
原来在清华镜像源Qt中能搜索到,最终找到了对应版本的文件,注意要和pyside2版本对应上
shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl
手动安装pip install shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl
终于成功安装。
之后,再安装pyside2,手动安装。
这次两个库都成功安装。
4. 环境变量配置
找到PySide2路径中的\plugins\platforms添加到环境变量中的用户变量里。
- 变量名为:QT_QPA_PLATFORM_PLUGIN_PATH
- 变量值为:PySide2\plugins\platforms的绝对地址
- 路径例子:D:\soft\Anaconda\Lib\site-packages\PySide2\plugins\platforms
5. Please destroy the QApplication singleton before creating a new QApplication instance
在Jupyter Notebook平台下使用网上找的一个程序,代码如下:
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit
app = QApplication.instance()
window = QMainWindow()
window.resize(500, 400)
window.move(300, 310)
window.setWindowTitle('薪资统计')
textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)
button = QPushButton('统计', window)
button.move(380,80)
window.show()
app.exec_()
运行完成后,弹出了窗口顿时泪流满面。
但是稍微当运行其他程序的时候,发现突然报错:
Please destroy the QApplication singleton before creating a new QApplication instance
查找相关材料后,发现是要在程序中,对app的情况进行判断,也就是在前两行增加语句:
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
也就是进行if判断。
最终终于解决了所有问题,下面开始正式开始Pyside2的学习!!!
Hello world!