PyQt/网络/README.md
2018-11-02 17:37:42 +08:00

70 lines
No EOL
2.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 网络
## [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` 连接报错触发该信号(连接超时、服务器断开等等)
<font color="red">目前暂未修复接收图片异,原因在于`readyRead`中没有判断数据长度进行多次接收(类似粘包处理)</font>
![截图](控制小车/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)