在paintEvent内部运行的函数需要将multiprocessing.Queue对象传递给自身。
我尝试使用全局python列表,但是列表不适用于多处理库。在代码的“主要”部分,我创建了一个multiprocess.Queue对象。函数drawMandelbrot是我的QWidget类的一部分,由paintEvent执行。每当需要在屏幕上绘制gui窗口时,paint事件就会运行。但是功能drawMandelbrot需要访问Queue对象以获取需要绘制的数据。
if __name__ == '__main__':
procQueue = Queue()
app = QApplication([])
#Called whenever the window is resized or brought into focus
def paintEvent(self, event, procQueue):
qp = QPainter()
qp.begin(self)
#Run the drawMandelbrot program
self.drawMandelbrot(qp, procQueue)
qp.end()
我希望该函数将Queue对象传递给drawMandelbrot函数。程序运行时,出现错误“ TypeError:paintEvent()缺少1个必需的位置参数:'Queue'”。如何允许drawMandelbrot函数访问在python应用程序的“主要”部分中创建的Queue对象?
答案 0 :(得分:0)
您无法修改所继承类的方法的签名,因此在这些情况下,解决方案是将变量传递给类的属性:
class FooWidget(QWidget):
def __init__(self, q, parent=None):
super(FooWidget, self).__init__(parent)
self.m_q = q
def paintEvent(self, event):
painter = QPainter(self)
self.drawMandelbrot(painter, self.m_q)
def drawMandelbrot(sef, painter, q):
# ... some code
if __name__ == '__main__':
procQueue = Queue()
app = QApplication([])
w = FooWidget(procQueue)
# ...
另一方面,由于Qt不支持多处理,因此只能在主进程的主线程中执行paintEvent(显然是drawMandelbrot),并且必须在作为主线程的GUI线程中执行GUI。