前言
一直想学一下python,特别是十一前抢票时达到顶峰。我正好是Qter,所以在网上找了一个教程直接学PyQt。
配置PyQt环境
当前环境
Win10+Qt5.15.2 +python3.11
之前安装python时好像自动安装了python的包管理工具pip,配置pyqt环境所需要安装的包都是使用pip进行安装的(在cmd中输入命令)。
在安装前可通过命令pip list查看已安装的包 ,看哪些没安装 ,根据下面的命令进行安装。
sip(Python调用C/C++模块)
Python中使用C/C++模块有许多工具,大名鼎鼎的有SWIG(英文意思为:豪饮)、SIP(英文意思为:啜饮,小口的喝),还有boost.python等。其中SIP是从SWIG发展而来,专为Python调用C/C++模块使用的
pip install sip
关于使用:Python SIP使用总结(Win&Linux通用)-蒲公英云
python GUI库(图形界面框架)
对于用python在Qt进行界面开发,有两个框架,PyQt5和PySide6,选哪个都可以,他们两个分别是不同的公司开发的,PyQt5早,PySide6晚,所以相对于的PyQt5的网上资料更多些。但是PySide6是Qt公司开发的,所以Qt Creator上推荐下载PySide6。还有。PySide是LGPL协议,LGPL协议是一个商业友好的协议使用 LGPL 协议开发闭源程序,如果你使用动态链接的形式,那么,你可以以任何形式(商业的、非商业的、开源的、非开源的等等)发布你的应用程序。
PyQt5
pip install PyQt5
PySide6
pip3 install PySide6
Python LSP(Language Server Protocol)
Python LSP(Language Server Protocol)是一种通过 JSON-RPC 通信协议实现的轻量级、跨编程语言的编写代码时的编辑器和工具语言服务器协议。Python LSP 是一种新的方式使编辑器能够更好地了解源代码的语义,并提供适当的补全、跳转、符号搜索、格式化等功能,暴露语言特定的 API 给编辑器/IDE。Python LSP 对于 Python 开发者来说是一个非常实用的工具。
pip install python-lsp-server
若由于一些局域网的原因,使用 pip 出现 “connection timeout”,连接超时可以使用国内的镜像网站下载:
- 豆瓣:https://pypi.doubanio.com/simple/
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
例如安装PyQt5可这么写:
#python安装路径#\python.exe -m pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
具体关于pip的使用可以参考
Python pip 安装与使用 | 菜鸟教程
使用PySide6 say hello
由于我比较习惯使用Qt Creator 的编辑器,所以我使用的是PySide6框架进行开发的。然后因为我还不会使用python语言添加控件,所以我在创建平台时,选择了带有ui文件的
可选择pyside的版本:pyside2 或者pyside6
在创建完成后,可以看到生成了三个文件,
test.pyproject为项目文件,描述了此项目中包含的文件
{
"files": ["widget.py", "form.ui"]
}
widget.py文件里包含了类Widget的声明和定义,和main函数
# This Python file uses the following encoding: utf-8
import sys
from PySide6.QtWidgets import QApplication, QWidget
# Important:
# You need to run the following command to generate the ui_form.py file
# pyside6-uic form.ui -o ui_form.py, or
# pyside2-uic form.ui -o ui_form.py
from ui_form import Ui_Widget
class Widget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_Widget()
self.ui.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = Widget()
widget.show()
sys.exit(app.exec())
上面 from ui_form import Ui_Widget 即是对ui文件的引用(包含),我在ui文件中添加了一个Label ,在对此项目运行后,打开ui文件所在路径,可看到已经生成了一个py文件:“ui_form.py”
具体代码如下:
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.6.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QSizePolicy, QWidget)
class Ui_Widget(object):
def setupUi(self, Widget):
if not Widget.objectName():
Widget.setObjectName(u"Widget")
Widget.resize(800, 600)
self.label = QLabel(Widget)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(310, 230, 141, 61))
font = QFont()
font.setPointSize(20)
font.setBold(True)
self.label.setFont(font)
self.retranslateUi(Widget)
QMetaObject.connectSlotsByName(Widget)
# setupUi
def retranslateUi(self, Widget):
Widget.setWindowTitle(QCoreApplication.translate("Widget", u"Widget", None))
self.label.setText(QCoreApplication.translate("Widget", u"Hello !!!", None))
# retranslateUi
上面看着库的导入还是label的创建,都比较正常,就是界面的重译(retranslateUi)有点怪,后面查了下资料说是:retranslateUi()函数集中设置了窗体上所有的字符串,利于实现软件的多语言界面。这样也就能理解了。
运行结果:
pyCharm上搭建PyQt环境
若是之前是有python基础的,可能更习惯使用PyCharm编辑,在网上也有相关教程。
搭建PyQt环境(PyCharm)_pycharm 配置qt-CSDN博客