【python版QT学习】pyQT5上位机实战笔记

举报
ReCclay 发表于 2022/02/23 00:35:12 2022/02/23
【摘要】 配置相关 designer.exe 拖拉控件实现UI界面的工具,设计完成保存后是.ui文件Program参数:D:\Python\Python38-32\Scripts\designer.exe...

配置相关

  • 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

程序中的一些函数记录

python3 基础

python的for in if 列表推导式用法

python中self

python中的继承

python中网络请求

pyqt5界面相关

鼠标相关

多线程

字节串

启动界面

model/view介绍入门

WindowFlags

关于字体

关于右键菜单

关于显示图片

关于绘图

表单控件 QTableWidget

QLabel

EventFilter

opencv

QTableView

时间

pyqtSignal

HTTP

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/107181079

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。