cara menambahkan gambar ke kelas QGraphicsScene dengan menggunakan pixmap

Di sini saya membuat grid di kelas Q Graphics Scene dan saya ingin menambahkan gambar ke setiap sel di grid, bisakah Anda membantu saya. bagaimana saya bisa menambahkan gambar di setiap sel grid

class QS(QtGui.QGraphicsScene):
        def __init__(self, *args, **kwargs):
        super(QS, self).__init__(*args, **kwargs)

        # self.grview = QtGui.QGraphicsView()
        self.scene = QtGui.QGraphicsScene()
        self.scene.addPixmap(QtGui.QPixmap('pradeep.jpg'))
        self.grview.setScene(self.scene)



        print "Inserted in QS col = {}, row = {}".format(X,Y)

        width = X * Setting.WIDTH
        height = Y * Setting.HEIGHT
        self.setSceneRect(0, 0, width, height)

        self.setItemIndexMethod(QtGui.QGraphicsScene.NoIndex)

        for x in range(0,X+1):
            xc = x * Setting.WIDTH
            self.addLine(xc,0,xc,height)
            self.scene.addPixmap(QtGui.QPixmap('pradeep.jpg'))
            # self.addPixmap(self.pixmap)


        for y in range(0,Y+1):
            yc = y * Setting.HEIGHT
            self.addLine(0,yc,width,yc)
            self.scene.addPixmap(QtGui.QPixmap('pradeep.jpg'))
            # self.addPixmap(self.pixmap)

        # for x in range(0,X+1):
        #     for y in range(0,Y+1):
        #         self.addPixmap(0,y,imag)

class QV(QtGui.QGraphicsView, QtGui.QMainWindow):

    def __init__(self, *args, **kwargs):
        super(QV, self).__init__(*args, **kwargs)

gambar kisi saya diberikan di bawah masukkan deskripsi gambar di sini


person navya sri    schedule 01.10.2018    source sumber
comment
Apakah Anda ingin berinteraksi dengan item tersebut atau hanya ingin item tersebut menjadi gambar latar belakang?   -  person eyllanesc    schedule 01.10.2018
comment
Saya tidak ingin gambar latar belakang Pak, saya ingin menambahkan gambar ke setiap sel dalam kotak, saya mencoba banyak cara tetapi tidak berhasil.   -  person navya sri    schedule 01.10.2018
comment
oke, dan mesh yang Anda inginkan menjadi gambar latar belakang atau Anda akan memindahkan garisnya?   -  person eyllanesc    schedule 01.10.2018
comment
Saya rasa anda belum paham dengan pertanyaan saya, menjadi gambar background juga bisa menggambar di dalam sel tetapi kekurangannya adalah anda tidak bisa bergerak dengan mouse tetapi kelebihannya adalah biayanya lebih murah, jadi saya bertanya kepada anda.   -  person eyllanesc    schedule 01.10.2018
comment
ya pak saya ingin gambar latar belakang   -  person navya sri    schedule 01.10.2018
comment
Ketika Anda berkata: ya pak saya ingin seperti itu Saya tidak mengerti Anda, dalam jawaban saya saya akan menunjukkan beberapa opsi dan Anda akan menggunakan salah satu yang Anda inginkan, oke?, di sisi lain Saya telah menjawab pertanyaan Anda yang lain dan saya tidak tahu apakah itu bermanfaat bagi Anda, dan jika itu bermanfaat, Anda jangan lupa menandainya sebagai benar.   -  person eyllanesc    schedule 01.10.2018
comment
oke terima kasih banyak pak   -  person navya sri    schedule 01.10.2018


Jawaban (1)


Pertanyaan Anda dapat diartikan dengan banyak cara jadi saya akan menunjukkan beberapa opsi:

1. Jika Anda tidak akan berinteraksi dengan item seperti misalnya Anda tidak ingin memindahkannya, memilihnya, memutarnya, dll. maka item tersebut tidak perlu digunakan, yang terbaik dalam hal ini adalah menggunakan drawBackground() karena suatu item menghabiskan lebih banyak sumber daya daripada lukisan sederhana.

import sys
from PyQt4 import QtCore, QtGui


class Setting:
    WIDTH = 80
    HEIGHT = 80

X, Y = 7, 5


class QS(QtGui.QGraphicsScene):
    def __init__(self, parent=None):
        super(QS, self).__init__(QtCore.QRectF(0, 0, X * Setting.WIDTH, Y * Setting.HEIGHT), parent)

    def drawBackground(self, painter, rect):
        width = X * Setting.WIDTH
        height = Y * Setting.HEIGHT

        l = QtCore.QLineF(QtCore.QPointF(0, 0), QtCore.QPointF(width, 0))
        for _ in range(Y+1):
            painter.drawLine(l)
            l.translate(0, Setting.HEIGHT)

        l = QtCore.QLineF(QtCore.QPointF(0, 0), QtCore.QPointF(0, height))
        for _ in range(X+1):
            painter.drawLine(l)
            l.translate(Setting.WIDTH, 0)

        pixmap = QtGui.QPixmap("pradeep.png").scaled(Setting.WIDTH, 
            Setting.HEIGHT, 
            QtCore.Qt.IgnoreAspectRatio,
            QtCore.Qt.SmoothTransformation)

        p = QtCore.QPointF()
        for i in range(X):
            p = QtCore.QPointF(Setting.WIDTH*i, 0)
            for j in range(Y):
                painter.drawPixmap(p, pixmap)
                p += QtCore.QPointF(0, Setting.HEIGHT)


class QV(QtGui.QGraphicsView):
    pass


class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        scene = QS(self)
        view = QV(scene)
        self.setCentralWidget(view)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

masukkan deskripsi gambar di sini

2. Jika Anda ingin berinteraksi dengan gambar, Anda dapat menggunakan QGraphicsPixmapItem, atau kombinasi keduanya:

import sys
from PyQt4 import QtCore, QtGui


class Setting:
    WIDTH = 80
    HEIGHT = 80

X, Y = 7, 5


class QS(QtGui.QGraphicsScene):
    def __init__(self, parent=None):
        super(QS, self).__init__(QtCore.QRectF(0, 0, X * Setting.WIDTH, Y * Setting.HEIGHT), parent)

        pixmap = QtGui.QPixmap("pradeep.png").scaled(Setting.WIDTH, 
            Setting.HEIGHT, 
            QtCore.Qt.IgnoreAspectRatio,
            QtCore.Qt.SmoothTransformation)

        p = QtCore.QPointF()
        for i in range(X):
            p = QtCore.QPointF(Setting.WIDTH*i, 0)
            for j in range(Y):
                it = self.addPixmap(pixmap)
                it.setPos(p)
                p += QtCore.QPointF(0, Setting.HEIGHT)

    def drawBackground(self, painter, rect):
        width = X * Setting.WIDTH
        height = Y * Setting.HEIGHT

        l = QtCore.QLineF(QtCore.QPointF(0, 0), QtCore.QPointF(width, 0))
        for _ in range(Y+1):
            painter.drawLine(l)
            l.translate(0, Setting.HEIGHT)

        l = QtCore.QLineF(QtCore.QPointF(0, 0), QtCore.QPointF(0, height))
        for _ in range(X+1):
            painter.drawLine(l)
            l.translate(Setting.WIDTH, 0)


class QV(QtGui.QGraphicsView):
    pass


class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        scene = QS(self)
        view = QV(scene)
        self.setCentralWidget(view)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
person eyllanesc    schedule 01.10.2018
comment
terima kasih banyak pak .. saya seorang pemula di pyqt4 tetapi saya ingin mempelajari semua konsep, bisakah Anda menyarankan saya buku yang bagus - person navya sri; 01.10.2018
comment
@GouthamySri Saya tidak tahu buku apa pun, saya bisa menyarankan dokumen QT meskipun untuk C ++ konsepnya diterapkan ke PyQt, sebaliknya jika Anda sedang belajar lebih baik Anda mempelajari PyQt5, PyQt4 sudah usang, saya mempelajarinya untuk mempertahankan proyek lama. Di sisi lain Anda telah memberi saya upvote, dan hal lainnya adalah menandainya sebagai benar, jika Anda melakukannya saya akan berterima kasih banyak, jika Anda tidak tahu bagaimana melakukannya, tinjau tur. Terakhir, tinjau jawaban SO yang lama, di banyak jawaban kami menjelaskan konsepnya. - person eyllanesc; 01.10.2018