QtWidgets.QGraphicsPixmapItemから継承するクラスに複数のQPixmapを配置するにはどうすればよいですか?

ウラド

今日、私はQPixmapで立ち往生しました。私のクラスはQtWidgets.QGraphicsPixmapItem、以下の例のように継承しています。

class graphicButton(QtWidgets.QGraphicsPixmapItem):
    def __init__(self):
        pixmapA = QtGui.QPixmap(r"img.png")

        QtWidgets.QGraphicsPixmapItem.__init__(self, pixmapA)
        self.setFlags(
            self.flags( )
            | QtWidgets.QGraphicsItem.ItemIsSelectable
            | QtWidgets.QGraphicsItem.ItemIsMovable
        )
    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            print("mouse left press")
            event.accept()
        elif event.button() == QtCore.Qt.RightButton:
            print("mouse right press")
            event.accept()
        elif event.button() == QtCore.Qt.MidButton:
            print("mouse middle press")
            event.accept()

正常に動作していますが、複数の画像を配置したい場合はどうすればよいですか?私がグーグルで見つけたほとんどの場合、あなたは複数のQGraphicsPixmapItemsを作る必要があります。その場合、QGraphicsPixItemから継承できなくなり、QGraphicsItemを選択する必要がありますか、それとも何かが足りませんか?

eyllanesc

簡単な解決策は、その位置に関連付けられた画像をロードすることです。たとえば、次の場合、画像を五角形の頂点に配置します。

import random
from PyQt5 import QtCore, QtGui, QtWidgets


class GraphicsButton(QtWidgets.QGraphicsPixmapItem):
    def __init__(self, name, pixmap, parent=None):
        super(GraphicsButton, self).__init__(pixmap, parent)
        self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True)
        self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True)
        self._name = name

    @property
    def name(self):
        return self._name

    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            print("mouse left press")
        elif event.button() == QtCore.Qt.RightButton:
            print("mouse right press")
        elif event.button() == QtCore.Qt.MidButton:
            print("mouse middle press")
        print(self.name)
        super(GraphicsButton, self).mousePressEvent(event)


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        scene = QtWidgets.QGraphicsScene()
        view = QtWidgets.QGraphicsView(scene)
        self.setCentralWidget(view)
        # coordinates of the pentagon
        datas = [
            ("name1", "img0.png", QtCore.QPointF(0, -200)),
            ("name2", "img1.png", QtCore.QPointF(-190, -62)),
            ("name3", "img2.png", QtCore.QPointF(-118, 162)),
            ("name4", "img3.png", QtCore.QPointF(118, 162)),
            ("name5", "img0.png", QtCore.QPointF(190, -62)),
        ]
        for name, path, position in datas:
            item = GraphicsButton(name, QtGui.QPixmap(path))
            scene.addItem(item)
            item.setPos(position)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ