导语:想制作属于自己的桌面应用程序吗?今天Disen带你手把手入门。
什么是桌面应用?即在操作系统的可视化的桌面上,可以运行的程序。
比如说QQ,微信、爱奇艺等这些都是桌面应用。
早期开发桌面应用,都用哪些语言呢?
桌面应用软件,在操作系统中,通过操作系统桌面窗体展现应用内容,并实现用户交互操作。编程语言有很多种,但并不是每一种语言都具有支持UI开发的能力,很多语言支持UI开发能力,是有人专门为之实现的UI开发支持平台。简单地说,需要有专门的语言UI库支持,如C++中的Qt库、MFC库,Java的Swing、AWT相关依赖库,否则语言是没办法进行快速UI开发的。
现在我们可以用Python开发啦,简单高效!那 Python开发桌面应用直接就可以开发吗?
不是的!要安装Python的PyQt5开发
GUI程序。
PyQt5
是基于C++的Qt5库,Qt5是用于桌面应用开发,PyQt5
是将C++实现的Qt5封装成Python方便使用的库包。
PyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合。Qt库是目前最强大的库之一。PyQt是由Phil Thompson 开发。
PyQt
是一个Python模块集, 它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可。
在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
PyQt5
可以做这些桌面程序。
Conda环境
建议安装anaconda
集成环境,简称conda
环境, 内部默认安装数据分析(Numpy/Pandas)、爬虫Scrapy框架、Web框架、PyQt等相关工具。
以下是安装之后目录:
drwxr-xr-x 3 apple staff 96 2 25 2019 Anaconda-Navigator.app
drwxr-xr-x 449 apple staff 14368 10 10 18:48 bin
drwxr-xr-x 269 apple staff 8608 2 25 2019 conda-meta
drwxr-xr-x 3 apple staff 96 2 25 2019 doc
drwxr-xr-x 9 apple staff 288 11 26 14:40 envs
drwxr-xr-x 6 apple staff 192 2 25 2019 etc
drwxr-xr-x 305 apple staff 9760 5 17 2019 include
drwxr-xr-x 732 apple staff 23424 2 25 2019 lib
drwxr-xr-x 5 apple staff 160 2 25 2019 libexec
drwxr-xr-x 3 apple staff 96 2 25 2019 man
drwxr-xr-x 68 apple staff 2176 2 25 2019 mkspecs
-rw-rw-r-- 1 apple staff 745 2 25 2019 org.freedesktop.dbus-session.plist
drwxr-xr-x 15 apple staff 480 2 25 2019 phrasebooks
drwxr-xr-x 1086 apple staff 34752 9 29 18:05 pkgs
drwxr-xr-x 25 apple staff 800 2 25 2019 plugins
drwxr-xr-x 3 apple staff 96 2 25 2019 python.app
drwxr-xr-x 27 apple staff 864 2 25 2019 qml
drwxr-xr-x 7 apple staff 224 2 25 2019 resources
drwxr-xr-x 14 apple staff 448 2 25 2019 sbin
drwxr-xr-x 25 apple staff 800 2 25 2019 share
drwxr-xr-x 9 apple staff 288 2 25 2019 ssl
drwxr-xr-x 290 apple staff 9280 2 25 2019 translations
在 bin目录下,存在一个Designer.app应用是PyQt
的Designer设计器。文件的扩展名是.ui。
因为Conda安装之后,默认是base环境,所以可以使用Coda命令创建新的开发环境:
conda create -n gui python=python3.7
激活环境
conda activate gui
安装pyqt5
(gui) > pip install pyqt5==5.10
如果安装的PyQt5版本高于5.10,部分库将要单独安装,如WebEngine
(gui) > pip install PyQtWebEngine
PyCharm工具
编码IDE开发工具使用PyCharm, 需要增加两个Tools扩展工具。
UI设计工具
在工具的settings页面的左侧找到Tools菜单项, 选择它并点击右边的+按钮增加新的工具,在'Name'
输入框中输入qtDisigner
并在下面的Tool settings中Program指定程序的完整路径。如在Mac环境下/Users/apple/anaconda3/bin/Designer.app
, 并在Working directory
输入$FileDir$
。
Window 7/10下设置时需要注意,如果Anaconda安装在C盘用户的目录下,需要在CMD中安装pyqt-tools
,并从用户的目录下找到Designer.exe
。
pip install pyqt5-tools==5.9.2.1.3 --user
安装成功后,Program位置则在在C:\Users\{用户名}\AppData\Roaming\Python\Python37\site-packages\pyqt5_tools\designer.exe
另外,Working directory
工作目录也可以设置为当前项目目录。
转化工具
当ui设计完成后,需要将ui转成py脚本,进一步编码。与增加ui设计工具相同,在Tools中增加pyuic5
,Tool settings
的Program是pyuic5
,Parameters是$FileName$ -o $FileNameWithoutExtension$_rc.py
,Working director是$FileDir$
。
因为需要socket,所以简单介绍一下socket。
Socket是什么呢?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤 :
服务器监听
客户端请求
连接确认
生活中的场景就是:一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。生活中的场景就解释了这工作原理。
所以我们要想实现PyQt5+Socket
就要准备客户端和服务器端:
服务器端(部分代码):
if __name__ == '__main__':
datas = DataSource().load()
# 创建socket应用服务
server = socket.socket()
server.bind(('localhost', 18900)) # 绑定主机IP和Host
server.listen()
print('中心服务已启动\n等待客户端连接...')
while True:
client, addr = server.accept()
ClientThread(client, addr).start()
time.sleep(0.5)
客户端(部分代码):
class CenterClient():
def __init__(self, server, port):
super().__init__()
self.server = server
self.port = port
self.isConnected = False
self.client = None
def connect(self):
self.client = socket.socket()
self.client.connect((self.server, self.port))
msg = self.client.recv(8*1024)
if msg == b'OK 200':
print('---连接成功--')
self.isConnected = True
else:
print('---连接失败---')
self.isConnected = False
def send_cmd(self, cmd):
self.client.send(cmd.encode('utf-8'))
data = self.client.recv(8*1024)
print('{}命令结果: {}'.format(cmd, data))
if data == b'Error':
return '400'
return data.decode('utf-8')
效果展示:
千锋教育Python教程_700集零基础Python入门到精通教程(保姆级新手教程)
本套python视频零基础实战教学,Python从入门到精通,是由千锋教育Python人工智能学院推出的“Python全栈+人工智能”免费python全套学习视频。通过学习本python视频,你可以从零开始,从Python软件下载到Python安装一步步掌握Python开发的各项相关技能,最终达到企业对Python开发工程师、后端开发工程师、Python全栈开发工程师、python爬虫开发工程师、python数据分析工程师等职位的要求。