python - 暂停和恢复 QThread

标签 python pyqt pyqt4 qthread

我正在尝试暂停 QThread 并恢复它。

所以,我在 QThread 中有一个 RFID 读取循环,我想在读取器获得 RFID 代码时暂停无限循环。之后,有一个数据库检查。在检查结束时,我想恢复 RFID 读取循环以获取其他代码。

MVCE:

def main():
    global Thread
    app = QtGui.QApplication(sys.argv)
    main = Main()
    Thread = RFID_Thread()
    Thread.rfid_event.connect(Main().on_event)
    Thread.start()
    sys.exit(app.exec_())

class Main(object):
    def __init__(self):
        self.accueil = MainWindow(self)
        self.access = AccessWindow()
        self.accueil.show()

    def on_event(self, data):
        # I WANT TO PAUSE THE QTHREAD HERE

        ###################################
        #   CHECKING DB & SHOWING UI      #
        ###################################

        # AND RESUME IT HERE
class RFID_Thread(QtCore.QThread):
    rfid_event = pyqtSignal(str, name='rfid_event')
    def run(self):
        while 1:
            ser = serial.Serial(port=Serial_Port, baudrate=Serial_Baudrate)
            a = ser.read(19).encode('hex')
            ser.close()
            if len(a) <> 0:
                Code = a[14:]
                self.rfid_event.emit(Code)
                time.sleep(2)

if __name__=='__main__':
    main()

代码无法重现,因为你需要一个RFID Reader,但我们可以通过这两行来模拟他,而不是打开串口并从中读取数据:

a = "**************e20030654408021520403f4b"
time.sleep(4)

我尝试使用状态变量,但它不起作用。

最佳答案

最后我自己解决了这个问题

MVCE:

def main():
    global Thread
    app = QtGui.QApplication(sys.argv)
    main = Main()
    Thread = RFID_Thread()
    Thread.rfid_event.connect(Main().on_event)
    Thread.start()
    sys.exit(app.exec_())

class Main(object):
    def __init__(self):
        self.accueil = MainWindow(self)
        self.access = AccessWindow()
        self.accueil.show()

    def on_event(self, data):
        # I WANT TO PAUSE THE QTHREAD HERE

        Thread.Pause = False
        ###################################
        #   CHECKING DB & SHOWING UI      #
        ###################################

        # AND RESUME IT HERE
        Thread.Pause = True
class RFID_Thread(QtCore.QThread):
    rfid_event = pyqtSignal(str, name='rfid_event')
    Pause = True
    def run(self):
        while 1:
            if Pause:
                  ser = serial.Serial(port=Serial_Port, baudrate=Serial_Baudrate)
                  a = ser.read(19).encode('hex')
                  ser.close()
                  if len(a) <> 0:
                         Code = a[14:]
                         self.rfid_event.emit(Code)
                         time.sleep(2)
            else:
                  continue
 if __name__=='__main__':
    main()

最后,状态变量是解决方案!!

关于python - 暂停和恢复 QThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30281621/

相关文章:

python - 使用 Pandas 将行数据组转换为列

python - 为什么 PyQt5 给我这个 TypeError

python - PyQt点击图像的不同部分有各自的功能

python - pyqt - 更改 TableView 中的行~单元格颜色

python - PyQt 4 : Making a label scrollable

python - 有没有一种方法可以使用xlsxwriter将自动过滤器添加到所有列,而无需指定列范围?

python - 如何使用 Python 为 Mongo 创建全局唯一的 GUID/UUID 系统?

python - 在Python中循环遍历不同数据集的行和列

python - 从不同的小部件捕获信号

python - Python 中的一个令人困惑的案例