使用PyQt5进行开发

1安装环境

(具体根据安装版本的不同,会有所差异)

如何安装2019Pycharm最新版本-详细教程

https://blog.csdn.net/qq_15698613/article/details/86502371

Anaconda+Pycharm+PyQt安装教程

https://www.jianshu.com/p/8b992e47a0e4

PyCharm+PyQt5+QtDesigner的正确配置

https://blog.csdn.net/esting_tang/article/details/81082504

 

2 GUI开发

尽善尽美之作《Python Qt GUI与数据可视化编程》

https://blog.csdn.net/HongAndYi/article/details/99682597

第一个PyQt5项目

https://www.cnblogs.com/tkinter/p/5632245.html

PyQt5中文教程

http://code.py40.com/pyqt5/

 

3 相关课题

python获取设备硬件信息:

https://blog.csdn.net/fengmm521/article/details/79468677

用PyQt5.0制作一个GUI应用程序(结合Eric6,使用QT设计师)

https://www.lingyao.xyz/?id=13

使用pyinstaller打包Python3.5+PyQt5.6项目生成exe文件

https://blog.csdn.net/freewind06/article/details/52140921

如何使用Python编写一个二维码生成器?如何实现?

http://www.360doc.com/content/19/0316/08/62214076_821834918.shtml 

Pyqt+QRcode 生成 识别 二维码

https://www.cnblogs.com/dcb3688/p/4241048.html

加密

https://blog.csdn.net/wy_97/article/details/79434269

 

相关资料检索

需要安装的依赖库:

       pyinstaller, pyqt5, qrcode, wmi, requests, rsa, psutil, pywin32, pillow

A 关键信息

1)获取本机MAC地址

MAC地址直译为媒体存取控制位址,也称为局域网地址,MAC位址,以太网地址或物理地址,由网络设备制造商生产时写在硬件内部。

在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址。MAC地址用于在网络中唯一标示一个网卡。一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。

本地获取MAC地址的方法:

       cmd->ipconfig/all,可以查看。

解释:

       以太网适配器 本地连接:指有线网络连接;以太网适配器  Bluetooth连接:蓝牙网络连接;媒体已断开:指当前没有活动,未连接;

两个是VMware :一个是本地虚拟网卡,一个就虚拟机网卡,虚拟机与物理网络要建立网络桥接,必须要有两个虚拟网卡;

隧道适配器:IPv4网络与IPv6过度的一种机制,实现IPV4与IPV6通信;本地连接3产生的原因:一块网卡,插在不同的插口了,每换一回,就多一个;另一个是安装了虚拟网卡原因造成。

以太网适配器本地连接和以太网适配器以太网:可理解是同一种东西,应该是网卡驱动异常导致。网络适配器总体分为:有线,无线,虚拟。推荐书:《网络工程师基础教程》。

 

2)获取本机外网IP地址

       公网IP是指以公网连接Internet上的非保留地址。公网、内网是两种Internet的接入方式,公网的计算机和Internet上的其他计算机可随意互相访问。

程序获取:

       目前常用的思路是爬虫,即去访问能够返回IP信息的网页,通过正则表达式匹配的方法来读取本机外网IP地址。

      但是存在一个问题:单纯的程序发送网址,只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息。

而缺失这些信息的请求往往都是非正常的访问,例如爬虫,因此可能会被禁止访问。解决方法是需要在请求中添加UserAgent的信息。

       User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫。

 

1 本机浏览器的UserAgent查看:

针对chrome: 地址栏输入:about:version   回车即可找到userAgent信息

针对其他浏览器:地址栏中输入:javascript:alert(navigator.userAgent)   回车

2 也可以通过使用fake-useragent库,生成合法的UA:

安装fake-useragent库:pip install fake-useragent

使用fake-useragent库:

# python 程序

from fake_useragent import UserAgent
ua = UserAgent()

ua.ie #ie浏览器

ua.chrome

ua.google

ua.firefox

ua.random #通过真实的浏览器使用统计随机

 

B 一种UI工具:Qt Designer  

1) 预览:ctrl+R

2) 使用pyuic将.ui文件转换为.py文件(界面文件),后者随前者变化而变化。

3) 显示和业务逻辑的分离:界面文件和逻辑文件

4) 按钮实现流程:

       按钮是信号发射者,单击按钮后会发射一个信号,通过代码函数内部的通信机制获得这个按钮的单击事件被连接到的窗体操作,然后通知接收者窗体,运行槽函数。

5) PyQt有哪些默认的信号和槽,如何使用。

 

C 生成二维码工具

安装qrcode库等

 

pyinstaller踩过的坑及解决办法:

基本指令:pyinstaller -F -w CallGetTerminalInfo.py

新建虚拟python环境:因为python如果是惯用环境,打包出来的可执行文件大小比较大

压缩包工具:upx

错误提示:Failed to execute script xxx + console窗口闪退

可能原因:一切语句

解决方案:笨方法,下载一个录屏软件,根据控制台显示排查问题所在。

版本问题:pyinstaller和qt5版本不匹配问题  ->  解决方法:重装pyqt5或者降低pyqt5的版本

网络问题:Socket延时问题/远程连接被识别断开/防火墙问题  ->  解决方法:调整算法

语句适配性问题:无法找到qt5.core问题  ->  解决方法:在.py文件开头增加如下语句:

import sys, os
if hasattr(sys, 'frozen'):
    os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']

以及其他问题。

 

相关网络异常错误补充

1、遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。 

2、如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。 

3、若请求超时,则抛出一个 Timeout 异常。 

4、若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。 

5、所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException 。

 

Python学习日记4|python爬虫常见报错小结及解决方法

https://www.jianshu.com/p/17c921639ad0

如何使用pyinstaller打包32位的exe程序

https://www.jb51.net/article/161941.htm

 

额外参考资料:如何实现以上功能(C++

获取本机内网、外网ip(C++):

https://blog.csdn.net/xiaolengzile/article/details/41868989

关键信息:

IIP:

获取外网ip:

1、通过ip源,下载其脚本文件并保存。

2、保存文件中有外网ip,解析出来

获取外网ip所需要的IP源:(几乎所有可以显示IP地址的网页都可以成为IP源)

http://www.ipchicken.com/

http://whatismyipaddress.com/

http://www.ip138.com/ip2city.asp

LIP:

获取内网ip:

1、通过系统函数gethostname得到主机名。

2、通过主机名得到内网ip。

MAC:

  1. 通过内置的NetApi32.DLL的功能来实现的。

首先通过发送NCBENUM命令获取网卡的数目和每个网卡的内部编号;

然后对每个网卡标号发送NCBASTAT命令获取其MAC地址。

  1. ipconfig /all重定向管道

HD:

       WMI/DeviceIoControl接口

二维码:qrencode

RSA:openssl

 

拓展:

1)如何判断自己的IP是真实外网IP:https://www.cnblogs.com/lcword/p/8052549.html

2)python程序迁移到linux中可能需要做的调整:

  pyinstaller在Linux上的使用方法,用法与windows一致:https://blog.csdn.net/linda1000/article/details/12946297

  检查运行方式,所调用的模块,以及一些相关函数,在linux环境下是否需要修改;

  linux系统下获取硬件信息:https://blog.csdn.net/hejunqing14/article/details/49947661

  linux系统下使用python获取硬件信息的方法:ipconfig重定向方法:https://www.cnblogs.com/liwei0526vip/p/6172275.html

3)以pyinstaller打包生成的可执行程序为例,主要包含什么内容:

  exe文件:可执行文件(executable file),它可以加载到内存中,并且由操作系统加载程序执行,是可以在操作系统存储空间中浮动定位的可执行程序。exe文件分为两个部分:exe文件头和程序本体。exe文件比较复杂,属于多段的结构,可以说是dos最成功和最复杂的设计之一了。使用pyinstaller打包python程序获得的exe文件,其中的占比最大的是其中的第三方库。除了exe文件,还有一种可执行文件是.com文件,现在已经很少见到,它是用汇编或者用机器码直接写的可执行程序,没有文件头和复杂的文件结构,从文件的第一个字节就开始执行,适用于并不复杂的、追求效率的底层操作。

 

posted @ 2019-11-26 17:41  juliazhao  阅读(732)  评论(0)    收藏  举报