# PyQt5_BSD_Socket **Repository Path**: Amate123/py-qt5_-bsd_-socket ## Basic Information - **Project Name**: PyQt5_BSD_Socket - **Description**: 2022-9-17 复杂未知环境下基站自主部署实机代码 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: https://gitee.com/chenshao777/py-qt5_-bsd_-socket - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-09-17 - **Last Updated**: 2022-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PyQt5_BSD_Socket #### 总体介绍 2022-9-17 基站自主部署实机代码 1. pyqt的初期界面 2. pyqt的TCP上位机搭建 3. 服务器客户端通信(多线程) 4. pyqt上位机控制无人车测试 5. MATLAB算法代码转换(python) #### 各个文件介绍 - designer # 界面设计文件夹 - window_main.py # 由window_main.ui转化而来 - window_main.ui # QtDesigner设计的界面文件 - 将ui文件转换为py文件.txt # 具体命令 - scripts 项目代码 - BSD_Py01 # 群体基站部署PyQt上位机代码总和 - scripts # PyQt上位机模块化代码 - Robotics.py # 定义智能体类,保存智能体的位置信息等 - global_var.py # 定义全局变量类,保存全局变量 - main.py # 主函数,负责UI界面初始化、UI按钮事件、UI绘图、开启子线程等等 - recv_send.py # 客户端通信线程,接收客户端数据并通过信号传回主线程、同时处理客户端的断连 - socket_accept.py # 监听客户端连接、创建客户端通信线程、回传客户端数据到UI主线程 - thread_first.py # 子线程,创建TCP服务器、创建socket监听线程、关闭服务器功能、显示客户端数量、发送控制命令 - 基站部署算法 # MATLAB基站部署算法转化为python代码 - 太多了,暂略 - 模块化前代码 # 模块化处理之前的上位机代码 #### 主要技术 - 1. pycharm + QtDesigner + PyUIC QtDesigner:制作界面 PyUIC:将.ui文件转成.py文件 - 2. 两种加载UI文件的方法: 1)UIC加载UI文件路径 from PyQt5 import uic ... class MyWindow(QWidget):   def __init__(self):     super().__init__()     self.ui = uic.loadUi("D:/PycharmProjects/001/src/BSD01/designer/window_main.ui") ... if __name__ == '__main__':   app = QApplication(sys.argv)   myui = MyWindow()   myui.ui.show()   app.exec() 2)继承UI类 class MyWindow(window_main.Ui_MainWindow):   def __init__(self, MainWindow):     super().setupUi(MainWindow) ... if __name__ == '__main__':   app = QApplication(sys.argv)   window = QMainWindow()   myui = MyWindow(window)   window.show()   app.exec() - 3. 将matplotlib嵌入PyQt控件 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas import matplotlib.pyplot as plt ... self.layout = QtWidgets.QVBoxLayout(self.ui.groupBox_1) # 1.将其中一个控件设置布局 self.figure = plt.figure(figsize=(10, 10), dpi=120) # 2.定义一个figure self.canvas = FigureCanvas(self.figure) # 3.定义一个canvas self.layout.addWidget(self.canvas) # 4. 将canvas加入该布局 - 4. json类的使用,json.dumps()可将字典转成字符串,json.loads()可将字符串转成字典 - 5. 类的使用,比如智能体类、全局变量类 - 6. PyQt的pyqtSignal(from PyQt5.QtCore import pyqtSignal)使用,可在多个线程之间传递信号,且可以通过信号传递数据,但是要注意定义的位置,要在类的 "__init__(self):" 之前定义 class Thread(QThread):   open_server = pyqtSignal(str) # 自定义信号,emit时要传入str类型参数   close_server = pyqtSignal() - 7. QThread的使用,自动运行run()方法,开启线程时也可以传递参数(self.server = Server_Thread(self.listenSocket, self.data_signal)) - 8. 可以定义一个类,使其继承QThread,别的类中定义其对象即可开启一个线程 class Server_Thread(QThread):   def __init__(self,arg): # arg:这里可以在定义对象的时候传参数   super().__init__()   ...   def run(self):     while True:     ...