PyQt6中使用pyqtgraph绘图报AttributeError的解决求助
问题分析与修复方案
错误原因
你在page1里的pizdec是Qt Designer拖入的普通QWidget,而plot()是pyqtgraph专属PlotWidget的方法,普通QWidget没有这个属性,所以调用时会报错AttributeError: 'QWidget' object has no attribute 'plot'。
两种修复方法
方法1:直接在Qt Designer中替换控件
- 打开你的UI文件,找到page1里的
pizdec控件(QWidget)。 - 右键点击该控件,选择「提升为...」。
- 在弹出的对话框中:
- 提升的类名称:填
PlotWidget - 头文件:填
pyqtgraph - 点击「添加」→「提升」。
- 提升的类名称:填
- 保存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
相关产品推荐
相关产品推荐

