Может быть, неделю назад я спрашивал о том, как наследовать и создавать пользовательские классы. Как было объяснено, вы должны наследовать от модуля, например, в моем случае это QtWidgets.QGraphicsItem
, и вам нужно вызывать его с super
или QtWidgets.QGraphicsItem.__init__(self)
, как это. Я читал об этом некоторым сотрудникам, и недавно я немного поиграл с этим, и он работал, но когда сегодня я попробовал QtWidgets.QGraphicsItemit
, это не сработало. Вот мой код:
from PySide2 import QtGui, QtCore, QtWidgets
class testUi(QtWidgets.QDialog):
def __init__(self, parent=None):
QtWidgets.QDialog.__init__(self)
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000, 650)
self.create( )
def create(self):
self.setWindowTitle(self.title)
self.resize(QtCore.QSize(*self.size))
self.testik = test(self)
self.mainLayout = QtWidgets.QVBoxLayout( )
self.mainLayout.addWidget(self.testik)
self.setLayout(self.mainLayout)
class test(QtWidgets.QGraphicsView):
zoom_signalA = QtCore.Signal(bool)
zoom_signalB = QtCore.Signal(bool)
def __init__(self, parent=None):
QtWidgets.QGraphicsView.__init__(self)
self._scene = QtWidgets.QGraphicsScene(backgroundBrush=QtCore.Qt.gray)
self.__zoom = 0
self.setScene(self._scene)
self.graphicsItm = self._scene.addItem(graphicButton)
self.setTransformationAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(30, 30, 30)))
self.setFrameShape(QtWidgets.QFrame.NoFrame)
self.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding))
def wheelEvent(self, event):
if event.angleDelta( ).y( ) > 0:
factor = 1.25
self.__zoom += 1
else:
factor = 0.8
self.__zoom -= 1
self.scale(factor, factor)
#self.zoom_signalA.emit(self.__zoom < 5)
#self.zoom_signalB.emit(self.__zoom > 4)
class graphicButton(QtWidgets.QGraphicsItem):
def __init__(self):
QtWidgets.QGraphicsItem.__init__(self)
pixmap = QtGui.QPixmap(r"C:\Users\v.afanasjevs\Desktop\gimpTest\gimpTestButtonPresedA.png")
pixmap_item = QtWidgets.QGraphicsPixmapItem(pixmap)
pixmap_item.setFlags(
pixmap_item.flags( )
| QtWidgets.QGraphicsItem.ItemIsSelectable
| QtWidgets.QGraphicsItem.ItemIsMovable
)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = testUi()
window.setGeometry(500, 300, 800, 600)
window.show()
sys.exit(app.exec_())
Ошибка:
TypeError: 'PySide2.QtWidgets.QGraphicsScene.addItem' called with wrong argument types:
PySide2.QtWidgets.QGraphicsScene.addItem(ObjectType)
Supported signatures:
PySide2.QtWidgets.QGraphicsScene.addItem(PySide2.QtWidgets.QGraphicsItem)
Я предполагаю, что я ошибаюсь, думая, что вы можете сделать все каким-нибудь настраиваемым виджетом, как я делаю здесь, пытаясь сделать QtGui.QPixmap
графическим элементом. Если я прав и делаю это неправильно, то как использовать виртуальные функции QGraphicsItem на моей QPixmap? (Я хочу сделать свое изображение кнопкой, поэтому мне нужно использовать «mousePressEvent» и т. Д.).
Спасибо за ваше время.