首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsRectItem集图像崩溃

QGraphicsRectItem集图像崩溃
EN

Stack Overflow用户
提问于 2018-03-30 15:01:10
回答 1查看 252关注 0票数 0

我正在研究如何将地图图像设置为QGraphicsRectItem对象中的QGraphicsScene对象,并且在PyQT5中得到了一个干净的崩溃。

守则是:

代码语言:javascript
复制
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import smopy
from PIL.ImageQt import ImageQt


class MapWidget(QGraphicsRectItem):

    def __init__(self, parent=None):
        super(MapWidget, self).__init__(parent)

        self.setRect(0.0, 0.0, 800, 600)
        self.setFlags(self.ItemIsSelectable | self.ItemIsMovable)
        self.image = None

        # get map
        map = smopy.Map((42., -1., 53., 3.), z=11, tilesize=48)
        img = ImageQt(map.img)
        self.image = QPixmap.fromImage(img)

    def paint(self, painter, option, widget=None):
        painter.drawPixmap(QPoint(0, 0), self.image)


class Window(QDialog):

    def __init__(self):
        super(Window, self).__init__()

        self.layout = QVBoxLayout(self)

        self.view = QGraphicsView()

        self.scene = QGraphicsScene()

        self.view.setScene(self.scene)

        self.layout.addWidget(self.view)

        self.map = MapWidget()

        self.scene.addItem(self.map)

        self.resize(1200, 800)


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

输出消息是:

进程已完成,出口代码139 (被信号11: SIGSEGV中断)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-30 21:54:17

与其将其转换为PIL,还可以将其转换为numpy并加载到QImage。另一方面,最好使用QGraphicsPixmapItem,因为它可以正确地重新绘制。

代码语言:javascript
复制
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import smopy


class MapWidget(QGraphicsPixmapItem):
    def __init__(self, parent=None):
        super(MapWidget, self).__init__(parent)
        self.setFlags(self.ItemIsSelectable | self.ItemIsMovable)

        # get map
        map = smopy.Map((42., -1., 53., 3.), z=11, tilesize=48)
        numpy_image= map.to_numpy()
        img = QImage(numpy_image.data, *numpy_image.shape[1::-1], QImage.Format_RGB888)
        self.setPixmap(QPixmap.fromImage(img))

class Window(QDialog):
    def __init__(self):
        super(Window, self).__init__()

        self.layout = QVBoxLayout(self)
        self.view = QGraphicsView()
        self.scene = QGraphicsScene()
        self.view.setScene(self.scene)

        self.layout.addWidget(self.view)

        self.map = MapWidget()
        self.scene.addItem(self.map)
        self.resize(1200, 800)


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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49576715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档