
什么是桌面应用?即在操作系统的可视化的桌面上,可以运行的程序。

比如说QQ,微信、爱奇艺等这些都是桌面应用。
早期开发桌面应用,都用哪些语言呢?
桌面应用软件,在操作系统中,通过操作系统桌面窗体展现应用内容,并实现用户交互操作。编程语言有很多种,但并不是每一种语言都具有支持UI开发的能力,很多语言支持UI开发能力,是有人专门为之实现的UI开发支持平台。简单地说,需要有专门的语言UI库支持,如C++中的Qt库、MFC库,Java的Swing、AWT相关依赖库,否则语言是没办法进行快速UI开发的。
现在我们可以用Python开发啦,简单高效!那 Python开发桌面应用直接就可以开发吗?
不是的!要安装Python的GUI程序。
是基于C++的Qt5库,Qt5是用于桌面应用开发,是将C++实现的Qt5封装成Python方便使用的库包。
PyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合。Qt库是目前最强大的库之一。PyQt是由Phil Thompson 开发。
是一个Python模块集, 它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可。
在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
可以做这些桌面程序。

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应用是的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菜单项, 选择它并点击右边的+按钮增加新的工具,在输入框中输入并在下面的Tool settings中Program指定程序的完整路径。如在Mac环境下, 并在输入。
Window 7/10下设置时需要注意,如果Anaconda安装在C盘用户的目录下,需要在CMD中安装,并从用户的目录下找到。
pip install pyqt5-tools==5.9.2.1.3 --user 安装成功后,Program位置则在在另外,工作目录也可以设置为当前项目目录。
转化工具
当ui设计完成后,需要将ui转成py脚本,进一步编码。与增加ui设计工具相同,在Tools中增加,的Program是,Parameters是,Working director是。
因为需要socket,所以简单介绍一下socket。
Socket是什么呢?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让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') 效果展示:
