PyQt/Test/Network
2020-06-16 19:51:20 +08:00
..
控制小车 整理 2018-12-31 14:49:29 +08:00
窗口配合异步Http fix cgitb 2020-06-16 19:51:20 +08:00
README.md 整理 2018-12-31 14:49:29 +08:00

网络

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中没有判断数据长度进行多次接收(类似粘包处理)

截图

2、窗口配合异步Http

asyncio结合PyQt例子

  1. 依赖库:

    1. quamash对QT事件循环的封装替换https://github.com/harvimt/quamash
    2. asynciohttps://docs.python.org/3/library/asyncio.html
    3. aiohttphttps://aiohttp.readthedocs.io/en/stable/
  2. 在创建QApplication后随即设置替换事件循环loop

app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
w = Window()
  1. 通过asyncio.ensure_future(函数(), loop=loop)来执行某个异步函数

Window  →→  initSession初始化session

  ↓

  ↓

下载按钮  →→  doDownload执行_doDownload方法

              ↓

              ↓

          session.get下载json数据进行解析

              ↓

              ↓

添加到界面  ←←  _doDownloadImage对单张图片进行下载

截图