PyQt5 “PyTuning“调试软件从0开发总结

本文详细介绍了使用PyQt5开发调试软件"PyTuning"的过程,从图形界面搭建到功能实现,包括界面设计、按键回调、内容显示、信号槽和多线程的应用。通过继承ui文件、设置回调函数、处理文字和图片显示,以及实现多线程通信,最终完成了一个具备远程调试功能的上位机软件。
摘要由CSDN通过智能技术生成

PyQt5 "PyTuning"调试软件从0开发总结

北航3系大四要调小车在赛道上跑,小车单片机用的K60,老师提供的代码里还有串口收发的库,就想着用蓝牙模块再开发上位机调试软件进行远程调试,正好借此机会学习了一番PyQt。现在从头总结一下开发流程~想从0开发的可以参考。

代码功能:显示直观的调试界面,分两个线程,主线程负责处理用户事件以及显示,子线程处理串口通讯并向主线程上报数据。

放一下效果图~~
文末有全部代码链接
在这里插入图片描述

一、图形界面搭建(躯壳)

1,designer的安装与打开

这里博主用了designer进行图形界面开发,可以手拖控件,比纯手编直观多了,强烈推荐快速开发Qt简单图形界面的用这种方法。designer安装及打开方法:

pip install PyQt5
pip install pyqt-tools

如果用的是Anaconda,在Anaconda Prompt上运行上面两行后,找到anaconda3的安装目录并在下面找anaconda3 > Library > bin > designer,建议发送一个快捷方式到桌面上,之后更容易打开。
在这里插入图片描述

2,designer使用

下面简单说明一下designer的使用,由于设计的已经非常亲民了,就简略说下。基本你想干嘛,第一反应的操作就能实现。
在这里插入图片描述
① Widget Box
里面有各种各样的控件可以用,需要啥就把他往最中间要的位置拖就行了。
一些对控件选择的小建议:
1,大的框框用Group Box或 Frame. Group Box能方便的写小标题,Frame能显示明显的框框,虽然这些用最基础的Widget也能实现,但那两个更亲民直观好用。
2,文本提示用Label,好用
3,文本输入用Text Edit或Plain Text Edit,好用
4,大量文本输出用Text Browser,够大,能滚动(虽然其他也能)
5,!!!!想显示图片或视频,可以用Label!!!!很方便
6,尽量不要把所有东西都没有组织地堆到主界面上,不然后期调起来很麻烦,建议多创建几个框框,把同一个功能用到的控件放到这个框框里,再把框框在主界面上拖。

② Main Window
这里是你的创作画布,一个字:拖!!!
(除了拖还可以双击输入内容,反正操作非常直观)

③ 对象查看器
这里你可以看你所有控件的结构,跟文件浏览器似的,双击可以改对象名。
你并不想你的C盘所有文件全铺在表面,所以再次建议搭一个比较合理的结构,方便之后写代码。

④ 属性编辑器
这里列了好多控件常用的属性,点一个控件就会显示他的属性,从上到下依次是该控件对象的亲戚关系,越往下越是子对象。
在这里细调控件的位置很方便!!!

3,ui文件转py文件

designer保存的文件后缀.ui实际上是XML文件,想转成.py文件开始各种功能的编写很容易:在Anaconda Prompt里执行:

pyuic5 -o 文件路径\文件名.py 文件路径\文件名.ui

文件路径和文件名写自己的,.py文件就出来了,整个软件的图形界面骨架就能用了!!
建议把这段代码存记事本里!因为你肯定会再在designer里调整界面的hhhh,每次都得再执行一遍

二、功能实现(灵魂)

下面是PyQt界面开发的重头戏,上面designer造出来的只是个空壳子,现在需要注入灵魂让他动起来了。

1、继承ui转出的py躯壳

这步很重要!!不要直接在刚刚捏出来的py文件上编!!(他可能有几百行看起来很相似的代码,直接搞得你不想动他~)
以下博主就用自己的文件名做例子了。躯壳文件叫Racing_Tool.py,在同目录下创建新的文件,输入以下代码,跑,你会发现你已经继承了那具躯壳。(import了好多东西是我整个程序用的,先列在这里)

import Racing_Tool
from Vision import Vision, WeightsTuner, RecordDot
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QCoreApplication, QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmapimport sys
import serial
import re
import cv2
import numpy as np
from time import perf_counter

racing_tool = Racing_Tool.Ui_Main_Window

class RacingMain(QMainWindow, racing_tool):
    def __init__(self):
        QMainWindow.__init__(self)
        racing_tool.__init__(self)

        self.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = RacingMain()
    window.show()
    sys.exit(app.exec_())

2、按键回调函数

本程序博主只用了按键回调函数,还有按下enter的回调函数等,逻辑类似。

def __init__(self):
        QMainWindow.__init__(self)
        racing_tool.__init__(self)
		
        self.setupUi(self)
        self.button_functioning()

def button_functioning(self):
        self.send_steer.clicked.connect(self.on_send_steer)
        self.send_motor.clicked.connect(self.on_send_motor)
        self.send_track.clicked.connect(self.on_send_track)
        self.open_UART.clicked.connect(self.on_open_uart)
        self.data_query.clicked.connect(self.on_data_query)
        self.debug_clear.clicked.connect(self.on_clear_debug)
        self.quit_button.clicked.connect(QCoreApplication.instance().quit)
        self.weights_tuner_button.clicked.connect(self.on_set_weights)
        self.record_button.clicked.connect(self.on_record_tracks
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值