我的程序有主GUI线程来处理用户界面。在
另一个线程在不冻结主GUI的情况下开始处理繁重的工作(循环、计算等)。在
在我的“计算线程”中,我使用了另一个模块draw_plots
,它只绘制和保存多种绘图。在
import draw_plots as plots
class calculatorThread(QtCore.QThread):
signal1 = QtCore.pyqtSignal(int, int)
signal2 = QtCore.pyqtSignal(int,int)
signal3 = QtCore.pyqtSignal(int)
def __init__(self,input_file_txt, parameter_file_txt):
QtCore.QThread.__init__(self)
#and etc etc
在这条线索的某一点上,我呼吁:
^{pr2}$一切都很好,但是,我在屏幕上多次看到一条信息:
QPixmap: It is not safe to use pixmaps outside the GUI thread
想知道我做错了什么,如何避免这个信息。在
好吧,您可以从计算器线程发出plot命令,该命令反过来使用QPixmap绘制绘图-所有这些都是从计算器线程内部进行的。在
理想情况下,你不应该从计算器线程中绘图,而是发出一个信号,表明你已经准备好绘图了——然后在主线程中绘制。或许可以按照以下思路:
在外面,将
^{pr2}$plot_ready
信号连接到plot命令:如果计算是在单独的线程中完成的,则应该使用
QImage
。您还可以安全地访问QImage.bits()
,并直接对像素数据进行图像处理(速度快得多)。在由于警告明确指出,
QPixmap
对象只能从GUI线程使用。如果确实需要QPixmap
,可以将计算的QImage
转换为QPixmap
(但是可以直接在QPainter
上绘制QImage
)。在相关问题 更多 >
编程相关推荐