2
我一直試圖使用QGraphicsGridLayout
來使用PyQt4
。我安裝了PySide
,因此我將導入切換爲快速檢查,並按預期工作!對於下面的代碼,當使用PySide
時,RectangleWidget
上的paint
方法將按預期方式調用,但在使用PyQt4
時,將永遠不會調用paint
方法。QGraphicsGridLayout可以在PySide中使用,但不能在PyQt4中使用
我知道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
只是不是一個真正的理想解決方案。謝謝
是否有任何特別的原因,爲什麼這隻發生在PyQt4的GridLayout? LinearLayout在PyQt4和PySide中都運行良好。我現在一般都忽略了所有權方面,但我想現在是時候停止忽視了。謝謝。 – D2B
@ D2B。很難說:垃圾收集可能是不可預測的。這就是爲什麼忽視所有權可能有風險的原因。 – ekhumoro