gpt4 book ai didi

python - PySide2 引发错误, "QPaintDevice: Cannot destroy paint device that is being painted"

转载 作者:行者123 更新时间:2023-12-05 01:13:49 35 4
gpt4 key购买 nike

我试图在 QPixmap 上绘制一些东西,但它在清理过程中抛出了一个错误。

from PySide2.QtGui import QPixmap, QPainter
from PySide2.QtWidgets import QApplication

app = QApplication()
width = 200
height = 100
pixmap = QPixmap(width, height)
painter = QPainter(pixmap)
painter.drawLine(0, 0, 100, 100)
print('Done.')

当我运行它时,我看到“完成”消息,然后是一个错误。

Done.
QPaintDevice: Cannot destroy paint device that is being painted

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

我看到一些类似的问题有同样的错误,但不清楚是什么导致错误或如何避免错误。

最佳答案

经过实验,似乎 painter 必须在 pixmap 之前清理,否则会出现错误。例如,这可以正常工作。

from PySide2.QtGui import QPixmap, QPainter
from PySide2.QtWidgets import QApplication

app = QApplication()
width = 200
height = 100
pixmap = QPixmap(width, height)
painter = QPainter(pixmap)
painter.drawLine(0, 0, 100, 100)
print('Done.')

del painter
del pixmap

你也可以告诉painter 清理而不破坏它。只需调用 end() 告诉它您已完成绘画。

from PySide2.QtGui import QPixmap, QPainter
from PySide2.QtWidgets import QApplication

app = QApplication()
width = 200
height = 100
pixmap = QPixmap(width, height)
painter = QPainter(pixmap)
painter.drawLine(0, 0, 100, 100)
print('Done.')

painter.end()

还有一些其他的东西由于神秘的原因避免了错误。例如,这避免了错误。

from PySide2.QtGui import QPixmap, QPainter
from PySide2.QtWidgets import QApplication

app = QApplication()
width = 200
height = 100
pixmap = QPixmap(width, height)
painter = QPainter(pixmap)
painter.device() # <-- No idea why this helps!
painter.drawLine(0, 0, 100, 100)
print('Done.')

总而言之,只要确保画家在像素图之前清理干净即可。我建议在比像素图更小的范围内使用 painter,或者显式调用 painter.end()

关于python - PySide2 引发错误, "QPaintDevice: Cannot destroy paint device that is being painted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59605569/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com