アイテムがペイントされるときに発生する例外がありますが、すぐには報告されません。私のシステム(PyQt 4.5.1、Python 2.6)では、次のメソッドにモンキーパッチを適用しても例外は報告されません。
def drawItems(painter, items, options):
print len(items)
for idx, i in enumerate(items):
print idx, i
if idx > 5:
raise ValueError()
出力:
45
0 <PyQt4.QtGui.QGraphicsPathItem object at 0x3585270>
1 <PyQt4.QtGui.QGraphicsSimpleTextItem object at 0x356ca68>
2 <PyQt4.QtGui.QGraphicsSimpleTextItem object at 0x356ce20>
3 <PyQt4.QtGui.QGraphicsSimpleTextItem object at 0x356cc88>
4 <PyQt4.QtGui.QGraphicsSimpleTextItem object at 0x356cc00>
5 <PyQt4.QtGui.QGraphicsSimpleTextItem object at 0x356caf0>
6 <PyQt4.QtGui.QGraphicsSimpleTextItem object at 0x356cb78>
ただし、アプリケーションを閉じると、次のメソッドが出力されます。
Exception ValueError: ValueError() in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored
印刷してみましたが、モンキーパッチメソッドthreading.currentThread()
の内部または外部で呼び出されても同じスレッドが返されます。drawItems
options
コードでは、これは、それぞれのオプションオブジェクトではなく、個々のアイテムに(スタイルオプションオブジェクトのリストである)渡すという事実が原因である可能性があります。このコードを使用すると、正しい結果が得られるはずです。
def drawItems(self, painter, items, options):
for item, option in zip(items, options):
print "Processing", item
# ... Do checking ...
item.paint(painter, option, self.target)
self.target
また、はシーンオブジェクトであると言います。のドキュメントは次のようにpaint()
述べています。
この関数は通常QGraphicsViewによって呼び出され、アイテムのコンテンツをローカル座標でペイントします。...ウィジェット引数はオプションです。提供されている場合は、ペイントされているウィジェットを指します。それ以外の場合は0です。キャッシュされたペイントの場合、ウィジェットは常に0です。
タイプはQWidget*
です。QGraphicsScene
ウィジェットから継承しQObject
、ウィジェットではないため、これも間違っている可能性があります。
それでも、例外がまったく報告されていない、またはすぐに報告されていないという事実は、何らかの不正行為を示唆しているため、メンテナに連絡する必要があります。