Python,QTimer和多处理管道

时间:2019-01-02 22:01:24

标签: python python-3.x multiprocessing qtime

我有两个班:子弹班和主班。我需要创建子弹的移动,但是我做到了,但是当子弹移出屏幕时,我不知道如何停止移动子弹的功能。因此,随着时间的推移,程序会变慢。

import multiprocessing as mp
from PyQt5.QtCore import Qt, QTimer

def bullet(self):
    if self.bull_on[0] is None:
        if self.bull is not None:
            self.timer.stop()
            del self.bull

        self.bull = Bullet(self, self.player.geometry(), self.pipeB1)
        self.bull_on[0] = 1

        if self.player.pix1.position == 'up':
            self.timerCallback = functools.partial(self.bull.move_up, isOn=self.bull_on)
            self.timer.timeout.connect(self.timerCallback)
            self.timer.start(10)

上面的代码创建Bullet类的实例并启动funcion来移动子弹 下面的代码是开始的功能

def move_up(self, isOn):
    send = [self.rec1.x(), self.rec1.y() - self.counter * 2, 'u']
    self.pipe.send(send)
    val = self.pipe.recv()
    if val > -1:
        self.bullet1 = QPixmap('Images\\Bullet_up.png')
        self.setGeometry(self.rec1.x() + 16, self.rec1.y() - 20 - self.counter*2, self.rec1.width(), self.rec1.height())
        self.setPixmap(self.bullet1)
        self.show()
        self.counter += 1
    else:
        isOn[0] = None
        self.hide()

我使用

  

self.timer.stop()

  

del self.bull

但这不起作用。我尝试过

  

self.timer.disconnect(self.timerCallback)

但这会引发错误,指出管道未正确关闭。

我的问题是如何在后台停止该功能?

0 个答案:

没有答案