От часове се опитвам да накарам QGraphicsGridLayout
да работи с PyQt4
. Имам инсталиран PySide
, така че превключих импортиранията към него за бърза проверка и работи според очакванията! За кода по-долу, когато се използва PySide
, методът paint
на RectangleWidget
се извиква според очакванията, но когато използвате PyQt4
, методът paint
никога не се извиква.
Знам, че RectangleWidget
трябва да замени някои повече виртуални методи за правилно внедряване, но изтривах нещата, за да опитам да получа минималното количество код, за да стесня проблема.
from PySide import QtGui, QtCore
# from PyQt4 import QtGui, QtCore
class RectangleWidget(QtGui.QGraphicsWidget):
def __init__(self, rect, parent=None):
super(RectangleWidget, self).__init__(parent)
self.rect = rect
def paint(self, painter, *args, **kwargs):
print('Paint Called')
painter.drawRect(self.rect)
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.central_widget = QtGui.QWidget(self)
central_layout = QtGui.QHBoxLayout()
self.central_widget.setLayout(central_layout)
self.setCentralWidget(self.central_widget)
self.resize(500, 500)
self.view = QtGui.QGraphicsView()
self.scene = QtGui.QGraphicsScene()
self.view.setScene(self.scene)
panel = QtGui.QGraphicsWidget()
self.scene.addItem(panel)
layout = QtGui.QGraphicsGridLayout()
panel.setLayout(layout)
for i in range(4):
for j in range(4):
rectangle = RectangleWidget(QtCore.QRectF(0, 0, 50, 50))
layout.addItem(rectangle, i, j)
central_layout.addWidget(self.view)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
widget = MainWindow()
widget.show()
app.exec_()
Всяка помощ се оценява! Бих искал да поддържам съвместимост както с PyQt4
, така и с PySide
, така че продължаването на използването само на PySide
всъщност не е идеалното решение. Благодаря