如何在QGraphicsView中添加图片?动态加载图片程序崩溃问题求解
问题原因
- 你没有初始化
self.scene属性,也没有给UI加载的gv(QGraphicsView组件)绑定关联的QGraphicsScene实例,调用self.scene.setSceneRect时属于访问未定义的空对象,触发空指针访问异常,直接导致程序崩溃,报错码0xC0000409就是Windows平台下这类内存访问错误的典型返回值。 - 代码中出现的
self.orig_gv也属于未定义属性,你的UI文件中QGraphicsView的id是gv,不存在orig_gv这个组件对象。
解决步骤
- 在类的初始化方法
__init__中创建QGraphicsScene实例,绑定到self.scene,同时为self.gv设置关联的场景。 - 修正
load方法中的错误属性引用,直接使用已初始化的self.scene操作场景元素。
修正后的完整代码
import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5 import uic from PyQt5 import QtWidgets class MyWin(QtWidgets.QMainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) uic.loadUi("test.ui", self) # 新增:创建场景并绑定到QGraphicsView self.scene = QGraphicsScene() self.gv.setScene(self.scene) self.open.clicked.connect(self.load) def load(self): file_name, _ = QFileDialog.getOpenFileName( self, 'Open file', '.', 'Image Files (*.png *.jpg *.bmp)') if not file_name: return self.image_qt = QImage(file_name) pic = QGraphicsPixmapItem() pic.setPixmap(QPixmap.fromImage(self.image_qt)) self.scene.setSceneRect(0, 0, 400, 400) # 修正:直接用self.scene添加元素 self.scene.addItem(pic) if __name__ == '__main__': app = QApplication(sys.argv) dlgMain = MyWin() dlgMain.show() sys.exit(app.exec_())
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

