You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt6中使用pyqtgraph绘图报AttributeError的解决求助

问题分析与修复方案

错误原因

你在page1里的pizdec是Qt Designer拖入的普通QWidget,而plot()是pyqtgraph专属PlotWidget的方法,普通QWidget没有这个属性,所以调用时会报错AttributeError: 'QWidget' object has no attribute 'plot'。

两种修复方法

方法1:直接在Qt Designer中替换控件

  1. 打开你的UI文件,找到page1里的pizdec控件(QWidget)。
  2. 右键点击该控件,选择「提升为...」。
  3. 在弹出的对话框中:
    • 提升的类名称:填PlotWidget
    • 头文件:填pyqtgraph
    • 点击「添加」→「提升」。
  4. 保存UI文件,用pyuic6重新生成Python代码。

生成后的UI代码里,pizdec会自动变成pyqtgraph.PlotWidget,直接调用self.pizdec.plot()即可正常绘图。

方法2:在代码中手动替换(无需修改UI文件)

如果不想重新设计UI,可在自定义逻辑的初始化方法里,把原QWidget替换成PlotWidget:

from PyQt6.QtWidgets import QMainWindow, QApplication
import pyqtgraph as pg
import sys
from ui_file import Ui_MainWindow  # 替换成你的UI文件名

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        # 页面切换逻辑保留
        self.pushButton_page2.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(1))
        self.pushButton_page3.clicked.connect(lambda: self.stackedWidget.setCurrentIndex(2))
        
        # 替换pizdec为PlotWidget
        parent = self.pizdec.parent()
        # 记录原控件的位置
        pos_geo = self.pizdec.geometry()
        # 删除原QWidget
        self.pizdec.deleteLater()
        # 创建新的PlotWidget
        self.pizdec = pg.PlotWidget(parent)
        self.pizdec.setGeometry(pos_geo)
        
        # 现在可以正常绘图
        self.pizdec.plot([1,2,3,4], [1,4,9,16])

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

前置检查

确保已经安装pyqtgraph:

pip install pyqtgraph

内容的提问来源于stack exchange,提问作者ᅠWOlF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:55:24