From 7332eb81fcb162a6f52bac2e58e33ab67132feca Mon Sep 17 00:00:00 2001 From: Irony <892768447@qq.com> Date: Fri, 2 Nov 2018 17:37:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/org.eclipse.core.resources.prefs | 1 + 网络/README.md | 75 ++++++++++++++++-- 网络/控制小车/README.md | 26 ------ .../控制小车/ScreenShot/{1.png => 控制小车.png} | Bin 网络/控制小车/{ControlCar.py => 控制小车.py} | 0 网络/窗口配合异步Http/README.md | 32 -------- .../ScreenShot/{1.gif => 窗口配合异步Http.gif} | Bin 7 files changed, 71 insertions(+), 63 deletions(-) delete mode 100644 网络/控制小车/README.md rename 网络/控制小车/ScreenShot/{1.png => 控制小车.png} (100%) rename 网络/控制小车/{ControlCar.py => 控制小车.py} (100%) delete mode 100644 网络/窗口配合异步Http/README.md rename 网络/窗口配合异步Http/ScreenShot/{1.gif => 窗口配合异步Http.gif} (100%) diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 0ff7eb7..c3e9c55 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -68,6 +68,7 @@ encoding//\u7A97\u53E3/\u65E0\u8FB9\u6846\u81EA\u5B9A\u4E49\u6807\u9898\u680F\u7 encoding//\u7A97\u53E3/\u65E0\u8FB9\u6846\u81EA\u5B9A\u4E49\u6807\u9898\u680F\u7A97\u53E3/\u65E0\u8FB9\u6846\u81EA\u5B9A\u4E49\u6807\u9898\u680F\u7A97\u53E3.py=utf-8 encoding//\u7A97\u53E3/\u6D88\u606F\u5BF9\u8BDD\u6846\u5012\u8BA1\u65F6\u5173\u95ED.py=utf-8 encoding//\u7A97\u53E3/\u7A97\u53E3\u91CD\u542F.py=utf-8 +encoding//\u7F51\u7EDC/\u63A7\u5236\u5C0F\u8F66/\u63A7\u5236\u5C0F\u8F66.py=utf-8 encoding//\u7F8E\u5316/Effect/AnimationShadowEffect.py=utf-8 encoding//\u7F8E\u5316/Effect/\u56FE\u7247\u6309\u94AE\u8F93\u5165\u6846\u9634\u5F71.py=utf-8 encoding//\u7F8E\u5316/QLabel/\u5706\u5F62\u56FE\u7247.py=utf-8 diff --git a/网络/README.md b/网络/README.md index dcc435c..b6bbec5 100644 --- a/网络/README.md +++ b/网络/README.md @@ -1,5 +1,70 @@ -# 网络练习例子 - -### [Python3.4.4 or Python3.5][PyQt5] - -### [1.TcpSocket](TcpSocket/) \ No newline at end of file +# 网络 + +## [1、控制小车](控制小车/) +通过TCP连接树莓派控制小车的简单例子 + +需求: + + - 通过TCP连接到树莓派控制小车前后左右 + - 前进:0-100, 发送命令为F:2 + - 后退:0-100, 发送命令为B:2 + - 向左:32-42, 发送命令为L:2 + - 向右:42-52, 发送命令为R:2 + +注意: + + - 这里只用了UI文件做界面,并没有转换为python代码 + - server.py只是做个本地echo服务器用来测试命令是否正常,依赖`tornado`库,可以通过`pip install tornado`来安装 + - 另外需要做粘包处理,以(\n)作为粘包符 + - 由于wifi能力不行,发送图片要尽量小 + +说明: + + - `QTcpSocket.connected` 服务连接成功后触发该信号 + - `QTcpSocket.disconnected` 服务器丢失连接触发该信号 + - `QTcpSocket.readyRead` 服务器返回数据触发该信号 + - `QTcpSocket.error` 连接报错触发该信号(连接超时、服务器断开等等) + +目前暂未修复接收图片异,原因在于`readyRead`中没有判断数据长度进行多次接收(类似粘包处理) + +![截图](控制小车/ScreenShot/控制小车.png) + +## [2、窗口配合异步Http](窗口配合异步Http/) +`asyncio`结合PyQt例子 + +1. 依赖库: + 1. `quamash`(对QT事件循环的封装替换):https://github.com/harvimt/quamash + 2. `asyncio`:https://docs.python.org/3/library/asyncio.html + 3. `aiohttp`:https://aiohttp.readthedocs.io/en/stable/ + +2. 在创建`QApplication`后随即设置替换事件循环loop +```python +app = QApplication(sys.argv) +loop = QEventLoop(app) +asyncio.set_event_loop(loop) +w = Window() +``` + +3. 通过`asyncio.ensure_future(函数(), loop=loop)`来执行某个异步函数 + +Window  →→  initSession(初始化session) + +  ↓ + +  ↓ + +下载按钮  →→  doDownload(执行_doDownload方法) + +              ↓ + +              ↓ + +          session.get(下载json数据进行解析) + +              ↓ + +              ↓ + +添加到界面  ←←  _doDownloadImage(对单张图片进行下载) + +![截图](窗口配合异步Http/ScreenShot/窗口配合异步Http.gif) \ No newline at end of file diff --git a/网络/控制小车/README.md b/网络/控制小车/README.md deleted file mode 100644 index 2e6be21..0000000 --- a/网络/控制小车/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# 通过TCP连接树莓派控制小车的简单例子 - -需求: - - - 通过TCP连接到树莓派控制小车前后左右 - - 前进:0-100, 发送命令为F:2 - - 后退:0-100, 发送命令为B:2 - - 向左:32-42, 发送命令为L:2 - - 向右:42-52, 发送命令为R:2 - -注意: - - - 这里只用了UI文件做界面,并没有转换为python代码 - - server.py只是做个本地echo服务器用来测试命令是否正常,依赖tornado库,可以通过pip install tornado来安装 - - 另外需要做粘包处理,以(\n)作为粘包符 - - 由于wifi能力不行,发送图片要尽量小 - -说明: - - - QTcpSocket.connected 服务连接成功后触发该信号 - - QTcpSocket.disconnected 服务器丢失连接触发该信号 - - QTcpSocket.readyRead 服务器返回数据触发该信号 - - QTcpSocket.error 连接报错触发该信号(连接超时、服务器断开等等) - -## 截图 -![截图](ScreenShot/1.png) \ No newline at end of file diff --git a/网络/控制小车/ScreenShot/1.png b/网络/控制小车/ScreenShot/控制小车.png similarity index 100% rename from 网络/控制小车/ScreenShot/1.png rename to 网络/控制小车/ScreenShot/控制小车.png diff --git a/网络/控制小车/ControlCar.py b/网络/控制小车/控制小车.py similarity index 100% rename from 网络/控制小车/ControlCar.py rename to 网络/控制小车/控制小车.py diff --git a/网络/窗口配合异步Http/README.md b/网络/窗口配合异步Http/README.md deleted file mode 100644 index 01ccf3c..0000000 --- a/网络/窗口配合异步Http/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# asyncio结合PyQt例子 - -### [Python3.5][PyQt5] - -依赖库:
- quamash(对QT事件循环的封装替换):https://github.com/harvimt/quamash
- asyncio:https://docs.python.org/3/library/asyncio.html
- aiohttp:https://aiohttp.readthedocs.io/en/stable/
- -1、在创建QApplication后随即设置替换事件循环loop -```python -app = QApplication(sys.argv) -loop = QEventLoop(app) -asyncio.set_event_loop(loop) -w = Window() -``` - -2、通过asyncio.ensure_future(函数(), loop=loop)来执行某个异步函数 - -Window  →→  initSession(初始化session)
- ↓
- ↓
-下载按钮  →→  doDownload(执行_doDownload方法)
-           ↓
-           ↓
-          session.get(下载json数据进行解析)
-           ↓
-           ↓
-添加到界面  ←←  _doDownloadImage(对单张图片进行下载) - -# 截图 -![截图1](ScreenShot/1.gif) \ No newline at end of file diff --git a/网络/窗口配合异步Http/ScreenShot/1.gif b/网络/窗口配合异步Http/ScreenShot/窗口配合异步Http.gif similarity index 100% rename from 网络/窗口配合异步Http/ScreenShot/1.gif rename to 网络/窗口配合异步Http/ScreenShot/窗口配合异步Http.gif