请问代码中的graph_widget哪个功能函数能设置它位于ui界面的位置呢?
import sys
import serial
import threading
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QFont
import pyqtgraph as pg
class SerialPlotter(QMainWindow):
def __init__(self):
super().__init__()
self.serial_port = None
self.serial_thread = None
self.data_x = []
self.data_y = []
self.init_ui()
self.connect_serial()
def init_ui(self):
self.setWindowTitle("Serial Plotter")
self.setGeometry(100, 100, 800, 600)
self.graph_widget = pg.PlotWidget(title="高度检测")
# self.graph_widget.setXRange(-10, 10) # x的范围
# self.graph_widget.setYRange(-10, 10) # y的范围
# 表格大小
self.graph_widget.setFixedHeight(400)
self.graph_widget.setFixedWidth(400)
self.graph_widget.setBackground("w")
self.graph_widget.addLegend()
self.graph_widget.showGrid(x=True, y=True, alpha=0.5)
self.graph_widget.setLabel("left", "高度")
self.graph_widget.setLabel("bottom", "时间")
self.plot_data = self.graph_widget.plot(self.data_x, self.data_y, pen=pg.mkPen("b", width=2), name="Data")
self.setCentralWidget(self.graph_widget)
def connect_serial(self):
try:
self.serial_port = serial.Serial("COM5", baudrate=9600) # 设置串口号和波特率
self.serial_thread = threading.Thread(target=self.receive_data)
self.serial_thread.start()
except serial.SerialException as e:
print("Failed to connect to serial port:", str(e))
def receive_data(self):
while self.serial_port.is_open:
if self.serial_port.in_waiting:
# 从串口读取数据
data = self.serial_port.readline().decode("utf-8").strip()
self.update_plot(float(data))
def update_plot(self, data):
self.data_x.append(len(self.data_x))
self.data_y.append(data)
self.plot_data.setData(self.data_x, self.data_y)
def closeEvent(self, event):
if self.serial_port:
self.serial_port.close()
if self.serial_thread and self.serial_thread.is_alive():
self.serial_thread.join()
event.accept()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = SerialPlotter()
window.show()
sys.exit(app.exec_())