优化逻辑

master
45coll 2021-08-24 15:32:57 +08:00
parent 3988ab1b17
commit 99a5b1bcd3
7 changed files with 157 additions and 70 deletions

View File

@ -1,5 +1,5 @@
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from main_ui import *
from wifi_udp import *
import threading #引入并行
@ -11,47 +11,76 @@ class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
self.v_list=[]
self.v_list.append(np.zeros(300))
self.timeArray = np.arange(-300, 0, 1)
# 变量初始化
self.variable_init()
# 设置实例
self.CreateItems()
# 设置信号与槽
self.CreateSignalSlot()
# 图表初始化
self.plot_init()
self.velocity = 0
# 滑条
self.velocity_lineEdit.setText(str(self.velocity_horizontalSlider.value()))
# 设置信号与槽
def CreateSignalSlot(self):
self.wifi_recv_open_pushButton.clicked.connect(self.wifi_recv_open_pushButton_clicked)
self.velocity_horizontalSlider.valueChanged.connect(self.velocity_horizontalSlider_valueChanged)
self.wifi_config_pushButton.clicked.connect(self.wifi_config_pushButton_clicked)
# 设置实例
def CreateItems(self):
# 定时器-绘图刷新
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.update_plot)
self.timer.start(50)
# wifi udp
self.udp = udp()
self.wifi_IP_lineEdit.setText(self.udp.user_ip)
def variable_init(self):
# 图表数据变量
self.wifi_recv_flag = 0
self.udp_data = 0
self.target_velocity = 0
self.now_velocity = 0
# 接收数据
self.udp_data = ''
t1 = threading.Thread(target=self.udp_recv)
t1.start()
def plot_init(self):
# 图表可视化数组
self.v_list = []
self.v_list.append(np.zeros(300))
self.timeArray = np.arange(-300, 0, 1)
# 绘图对象
self.pw = pg.PlotWidget()
self.curve = self.pw.plot(pen='y')
self.gridLayout.addWidget(self.pw)
# 定时器
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.update_plot)
self.timer.start(50)
# 滑条事件绑定
# 滑条绑定
def velocity_horizontalSlider_valueChanged(self):
value = self.velocity_horizontalSlider.value()
self.velocity_lineEdit.setText(str(value))
# self.udp.send_message(str(value))
# self.curve.updateItems()
# self.curve.sigPlotChanged.emit(self.curve)
self.target_velocity = self.velocity_horizontalSlider.value()
self.velocity_lineEdit.setText(str(self.target_velocity))
self.udp.send_message(str(self.velocity_lineEdit))
def wifi_config_pushButton_clicked(self):
try:
self.udp.udpClientSocket.bind((self.wifi_IP_lineEdit.text(), 2333))
t1 = threading.Thread(target=self.udp_recv)
t1.start()
self.wifi_recv_open_pushButton.setEnabled(True)
except:
QMessageBox.critical(self, "错误", '该请求的地址无效')
def wifi_recv_open_pushButton_clicked(self):
if self.wifi_recv_flag == 0:
# 打开wifi接收
self.wifi_recv_flag = 1
self.wifi_recv_open_pushButton.setText('关闭')
else:
self.wifi_recv_flag = 0
self.wifi_recv_open_pushButton.setText('打开')
def udp_recv(self):
while True:
while self.wifi_recv_flag:
recv_data = self.udp.udpClientSocket.recv(1024)
recv_data = recv_data.decode('utf-8')
self.udp_data = recv_data
def update_plot(self):
print(self.udp_data)
if self.wifi_recv_flag:
self.v_list[0] = np.roll(self.v_list[0], -1)
self.v_list[0][-1] = self.udp_data
self.curve.setData(self.timeArray, self.v_list[0]) # 在绘图部件中绘制折线图

View File

@ -37,6 +37,26 @@ class Ui_MainWindow(object):
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(20, 420, 241, 61))
self.groupBox.setObjectName("groupBox")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.groupBox)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 20, 221, 31))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(1)
self.horizontalLayout.setObjectName("horizontalLayout")
self.wifi_IP_lineEdit = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
self.wifi_IP_lineEdit.setObjectName("wifi_IP_lineEdit")
self.horizontalLayout.addWidget(self.wifi_IP_lineEdit)
self.wifi_config_pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.wifi_config_pushButton.setObjectName("wifi_config_pushButton")
self.horizontalLayout.addWidget(self.wifi_config_pushButton)
self.wifi_recv_open_pushButton = QtWidgets.QPushButton(self.centralwidget)
self.wifi_recv_open_pushButton.setEnabled(False)
self.wifi_recv_open_pushButton.setGeometry(QtCore.QRect(180, 380, 93, 28))
self.wifi_recv_open_pushButton.setObjectName("wifi_recv_open_pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
@ -52,4 +72,9 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.velocity_lineEdit.setText(_translate("MainWindow", "0"))
self.label.setText(_translate("MainWindow", "速度:"))
self.groupBox.setTitle(_translate("MainWindow", "wifi_IP"))
self.wifi_IP_lineEdit.setText(_translate("MainWindow", "192.168.4.2"))
self.wifi_config_pushButton.setText(_translate("MainWindow", "设置"))
self.wifi_recv_open_pushButton.setText(_translate("MainWindow", "打开"))

View File

@ -48,6 +48,9 @@
<height>21</height>
</rect>
</property>
<property name="text">
<string>0</string>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
@ -73,6 +76,64 @@
</property>
<layout class="QGridLayout" name="gridLayout"/>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>20</x>
<y>420</y>
<width>241</width>
<height>61</height>
</rect>
</property>
<property name="title">
<string>wifi_IP</string>
</property>
<widget class="QWidget" name="horizontalLayoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>221</width>
<height>31</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>1</number>
</property>
<item>
<widget class="QLineEdit" name="wifi_IP_lineEdit">
<property name="text">
<string>192.168.4.2</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="wifi_config_pushButton">
<property name="text">
<string>设置</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QPushButton" name="wifi_recv_open_pushButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>180</x>
<y>380</y>
<width>93</width>
<height>28</height>
</rect>
</property>
<property name="text">
<string>打开</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">

View File

@ -1,42 +1,9 @@
# -*- coding: utf-8 -*-
"""
This example demonstrates many of the 2D plotting capabilities
in pyqtgraph. All of the plots may be panned/scaled by dragging with
the left/right mouse buttons. Right click on any plot to show a context menu.
"""
import socket
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
#QtGui.QApplication.setGraphicsSystem('raster')
app = QtGui.QApplication([])
#mw = QtGui.QMainWindow()
#mw.resize(800,800)
win = pg.GraphicsLayoutWidget(show=True, title="Basic plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
p6 = win.addPlot(title="Updating plot")
curve = p6.plot(pen='y')
data = np.random.normal(size=(10,1000))
ptr = 0
def update():
global curve, data, ptr, p6
curve.setData(data[ptr%10])
if ptr == 0:
p6.enableAutoRange('xy', False) ## stop auto-scaling after the first data set is plotted
ptr += 1
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)
## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
try:
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('8.8.8.8',80))
ip = s.getsockname()[0]
finally:
s.close()
print(ip)

View File

@ -9,8 +9,13 @@ class udp(object):
self.ADDRESS = (self.HOST, self.PORT)
self.udpClientSocket = socket(AF_INET, SOCK_DGRAM)
self.udpClientSocket.bind(("192.168.4.2",2333))
try:
s = socket(AF_INET, SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
self.user_ip = s.getsockname()[0]
finally:
s.close()
def send_message(self,data):
if not data:
return 0