【python版QT学习】pyQT5上位机实战笔记
配置相关
-
designer.exe
- 拖拉控件实现
UI
界面的工具,设计完成保存后是.ui
文件 Program
参数:D:\Python\Python38-32\Scripts\designer.exe
Working directory
参数:$FileDir$
- 拖拉控件实现
-
pyuic5
- 将界面
.ui
文件转换成.py
文件 Program
参数:D:\Python\Python38-32\Scripts\pyuic5.exe
Argument
参数:$FileName$ -o $FileNameWithoutExtension$.py
Working directory
参数:$FileDir$
- 将界面
-
pyrcc5
- 将资源(图片)
.qrc
文件转换成.py
文件 Program
参数:D:\Python\Python38-32\Scripts\pyrcc5.exe
Argument
参数:$FileName$ -o $FileNameWithoutExtension$.py
Working directory
参数:$FileDir$
- 将资源(图片)
from…import * 语句与 import 区别
- import 模块:导入一个模块;注:相当于导入的是一个文件夹,是个相对路径;使用:
模块.函数
- from…import:导入了一个模块中的一个函数;注:相当于导入的是一个文件夹中的文件,是个绝对路径;使用:
函数
- from a import A:导入
a.py
模块中的A
函数
.app.exec_()
- 程序一直循环运行直到主窗口被关闭终止进程
- 作用是运行主循环,必须调用此函数才能开始事件处理,调用该方法进入程序的主循环直到调用exit()结束
- 主事件循环从窗口系统接收事件,并将其分派给应用程序小部件
- 如果没有该方法,那么在运行的时候还没有进入程序的主循环就直接结束了,所以运行的时候窗口会闪退
- 在退出时会返回状态代码
- 不用sys.exit(app.exec_()),只使用app.exec_(),程序也可以正常运行,但是关闭窗口后进程却不会退出。
pyqt5借助QtDesigner设计图形界面的思路
- 利用QtDesignert软件设计界面,并保存,然后通过pyuic5程序将ui文件转换为py文件,最后编写一个main.py文件,运行py文件并显示。
QT
- 至少要安装Py-Qt5和pyqt5-tools
- QTDesigner
- 预览快捷键 ctrl+r
- 初次启动会弹出这个“New Form”窗口,一般来说选择“Main Window”然后点击“Create”就可以了。
- Qt Designer已经在Python3.5版本从PyQt5转移到了tools,因此我们还需要安装pyqt5-tools
- 子线程不能调用主线程的QtGui类
QStringListModel介绍
- 我们这里使用了一个QListView来和 QStringListModel进行连接,这样 QStringListModel的内容就会在QListView中显示出来,任何对 QStringListModel的修改都会显示在QListView中。这样我们就可以达到数据存储和显示的分离,我们可以专注我们的数据部分( QStringListModel,只要我们定义好接口),显示的部分就由QListView去负责,这就是QT的MVC(Model-View-Controller)机制,在MFC里也就是document和view。
界面修改
- 在主线程之外的线程更改界面
获取一个类实例的方法
- 在这个类中定义静态方法,返回其实例
- 直接在要使用的类中传入类的实例
python中的类
- 对象是类的实例
- 加了self的变量或者方法,只有实例才能调用
- 调用类的方法:C.fun()
- 调用类的实例的方法:c().fun()
- 一般类大小,实例小写(首字母)。比如类叫DataParse,那么实例一般叫dataParse。
- 普通继承方式和super继承方式单次继承的话没什么大区别。【多次继承super优势比较明显】
类中的下划线
- 单下划线、双下划线、头尾双下划线说明:foo: 定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。
- _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
- __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
HTTP
- 403 - Forbidden
- 404 - Not Found
- 500 - Internal Server Error
- 502 - Bad Gateway
- 503 - Service Unavailable
exec_和show区别
- 若使用exec_()的话,那么显示出来的注册界面就是模态的,意思就是当前只能对该注册界面进行操作,只有关闭了该界面才能对其他界面进行操作;若使用show()的话,那注册界面就是非模态的,则在显示了注册界面后,还能同时对登录界面进行操作(QDialog有exec_()方法,而QWidget没有)。
槽函数如果带参数
- 槽函数带参数,需要用lambda表达式进行处理
- eg:
self.ui.checkBoxRadarLeftFront.stateChanged.connect(lambda: self.playRadarPos(self.ui.checkBoxRadarLeftFront))
pyqt5
- . setWindowTitle()方法可以设置窗口标题
- setAlignment(Qt.AlignCenter)可以让QLabel控件在窗口中居中显示【更方便】
- 居中对齐还有:self.h_layout.addStretch(1)
事件处理
- 常用的包括窗口关闭事件处理、鼠标事件处理以及键盘事件处理
- 记得最后加上 accept 或者 ignore
- ignoret()其实功能上就相当于pass
关于休眠
- 中断不能休眠
- 线程可以休眠
关于None和False的一点对比
- None、空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False
- 但是None和[]不是一回事!!!
frames = []
if not frames:
print("000")
else:
print("111")
if frames == None:
print("222")
else:
print("333")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
问题记录
pyqtSignal
的参数应该是list
-
并行视频显示,提示
'NoneType' object has no attribute 'width'
解决办法
-
incr抛出几个信号量由下面的线程决定
-
图片资源
-
播放卡,注意是多少时间放一次
-
控件不能拉伸?
- 布局的缘故?
-
pycharm 报错
Try to run this command from the system terminal. Make sure that you use the correct version of 'pip' installed for your Python interpreter located at 'D:\Python\Python38-32\python.exe'.
(参考1 或者 参考2)- 打开cmd命令行,或者PowerShell终端
- 进入python.exe所在文件夹(如果设置了PATH,可以在任意目录下操作)
- 设置源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- 更新pip:
python -m pip install --upgrade pip
- 下载某个包:
pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
- 或者
python.exe -m pip install xxx -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
- 或者
-
AttributeError: module ‘serial’ has no attribute 'Serial’解决办法
类实例作为“某个函数”的形式参数
- 在这个“某个函数”改变类实例的成员,实际参数也是会改变的!
class ServerFileNode:
def __init__(self):
self.radar = 1
class yFunction:
def __init__(self, serverFileNode):
self.serverFileNode = serverFileNode
self.serverFileNode.radar = self.serverFileNode.radar + 1
serverFileNode = ServerFileNode()
yFunction(serverFileNode)
print(serverFileNode.radar)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
参考
环境配置,快速上手HelloWorld
- pycharm+PyQt5+python最新开发环境配置,踩坑过程详解
- 用Python写个上位机学习系列之第一个界面的设计 - pyqt5、pycharm、QtDesigner
- pycharm配置
- PyCharm安装配置Qt Designer+PyUIC教程
- PyQt5 图形界面-用Qt Designer来设计UI界面,并转化为python代码运行 (详细)
- 用Python写个上位机学习系列之第一个界面的设计 - 参考这里面的main.py程序
- PyQt5(designer)入门教程
- PyQt5(designer)入门教程2020
- PyQt5教程
- PyCharm+QTDesigner+PyUIC使用教程 - 非mainwindow的按钮点击
程序中的一些函数记录
python3 基础
- 言简意赅python系列—if not x: 和 if x is not None: 和 if not x is None: 的区别
- Python3 基本数据类型
- python集合增加数据的操作方法
- Python 内置函数
- Python3 print 函数用法总结
- Python set() 函数
- Python time sleep()方法
- json.dumps()和json.loads()
- Python3 find()方法
- Python find()方法
- Python lambda介绍
- Python format 格式化函数
- 给大家带来一篇python with as的用法
- python使用with as 读写文件
- get函数和get_nowait函数
python的for in if 列表推导式用法
python中self
python中的继承
python中网络请求
-
ImportError most likely due to a circular import 解决办法
pyqt5界面相关
-
PyQt5高清屏幕自适应设置 QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
-
QTextEdit 实现 QLineEdit 的 setPlaceholderText() 和 setMaxLength ()函数
-
PyQt(Python+Qt)学习随笔:gridLayout的layoutRowMinimumHeight和layoutColumnMinimumWidth属性
鼠标相关
多线程
- Python3 多线程 - threading.Thread; Queue
- Python中如何清空Queue?
- Python队列的三种队列实现方法
- Python threading中event的使用
- python之event事件
- Python多线程-Event(事件对象)
- Python threading中lock的使用
字节串
启动界面
model/view介绍入门
WindowFlags
关于字体
关于右键菜单
- PyQt5 右键菜单Context Menu 弹出的方法
- PyQt5 之右键菜单
- PyQt5 系统化学习: 表格与树
- PyQt5中弹出框QDialog的show()和exec()的区别
- PyQt5 右键菜单Context Menu 弹出的方法
关于显示图片
关于绘图
- 【Python】 【绘图】plt.figure()的使用
- matplotlib(二):画布(figure)与坐标轴(axes)的布局
- matplotlib画图系列之设置栅格,axes脊柱(坐标轴),背景颜色
- matplotlib命令与格式:tick_params参数刻度线样式设置
表单控件 QTableWidget
QLabel
EventFilter
- PyQt学习随笔:应用中通过installEventFilter安装重写的eventFilter捕获应用事件的方法
- PyQt里的EventFilter
- pyqt5 事件event 过滤 installEventFilter eventFilter QEvent.MetaCall
opencv
- 学习opencv之cvtColor
- cv2.imread()和cv2.cvtColor() 的使用
- CNN编程中的问题——img.shape[0]、[1]、[2]到底代表什么
- 机器学习进阶-图像基本操作-数值计算 1.cv2.add(将图片进行加和) 2.cv2.resize(图片的维度变换) 3.cv2.addWeighted(将图片按照公式进行重叠操作)
- 彩色图像技术重要函数cv2.addWeighted()
- Python-OpenCV 图像叠加or图像混合加权(cv2.addWeighted)
- 介绍OpenCV的MAT和QT的Qimage
- #最全面# Python 中如何将 Pyqt5 下的 QImage 对象转换成 PIL image 或 opencv MAT (numpy ndarray) 对象
- Python图像库PIL的类Image及其方法介绍
- 利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
- Python cv2.circle详细介绍
- python opencv3 向图像里写字
- Pyhon利用OpenCV在图片上显示文字及保存
- Python 用 OpenCV 画直线 (3)
QTableView
- QTableView根据内容自动调整大小(resizeColumnToContents解决不了的)
- QTableView填充表格(函数:setSectionResizeMode()和setStretchLastSection())
- QT表格的宽度自适应调整方法void setStretchLastSection ( bool stretch );
- QT表格的宽度自适应调整方法
时间
pyqtSignal
HTTP
文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。
原文链接:recclay.blog.csdn.net/article/details/107181079
- 点赞
- 收藏
- 关注作者
评论(0)