pyqtgraph学习中对于表格位置的设置问题

请问代码中的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_())

【以下回答由 GPT 生成】

问题中提到的代码中缺少相关信息无法给出具体解决方案,但是在PyQtGraph中可以使用setGeometry()函数来设置组件在UI界面中的位置。以下是一个示例代码:

import pyqtgraph as pg
from PyQt5.QtWidgets import QMainWindow, QWidget, QVBoxLayout

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        # 创建一个QWidget作为主窗口的中心部件
        central_widget = QWidget(self)

        # 创建一个垂直布局
        layout = QVBoxLayout(central_widget)

        # 创建一个PlotWidget作为图形组件
        graph_widget = pg.PlotWidget()

        # 将图形组件添加到布局中
        layout.addWidget(graph_widget)

        # 设置中心部件
        self.setCentralWidget(central_widget)

        # 设置图形组件的位置
        graph_widget.setGeometry(100, 100, 400, 300)

if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication

    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

在上面的示例代码中,使用setGeometry()函数设置了graph_widget在UI界面中的位置和大小。setGeometry()函数的参数依次为x坐标、y坐标、宽度和高度。通过修改这四个参数的值即可改变graph_widget的位置和大小。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^