【发布时间】:2015-12-23 00:49:53
【问题描述】:
我正在构建一个带有在 PyQt5 的后台线程中运行的套接字连接的 GUI。除了 Qthread 从不发出完成的信号外,一切都运行良好。也许这不是问题,我可以改变我的实现来解决它,但是一旦已移动的对象停止执行任何操作,Qthread 将继续运行的预期行为吗?
我应该在主类中编写一个函数以在我完成后停止线程,还是我可以将新内容移至该线程而不产生任何后果?
class MyClass(PyQt5.QtWidgets.QMainWindow)
def __init__(self, parent=None):
# Setup thread for the socket control
self.simulThread = PyQt5.QtCore.QThread()
self.socketController = SocketController()
self.socketController.moveToThread(self.simulThread)
self.simulThread.started.connect(self.socketController.controlSocket)
self.simulThread.finished.connect(self.deadThread)
# Bind controls to events
self.ui.buttonConnect.clicked.connect(self.simulThread.start)
self.ui.buttonDisconnect.clicked.connect(lambda: self.socketController.stop())
def deadThread(self, data):
print ("THREAD IS DEAD.")
class SocketController(PyQt5.QtCore.QObject):
finished = PyQt5.QtCore.pyqtSignal()
def __init__(self):
super(SocketController, self).__init__()
self.run = True;
def controlSocket(self):
#setup the socket
while self.run:
# do socket stuff
time.sleep(1)
#close the socket
self.finished.emit()
def stop(self):
self.run = False;
【问题讨论】:
-
你的意思是 THREAD IS DEAD 被打印出来了吗?
-
@Schollii 它确实不会被打印出来。
标签: python python-3.x pyqt pyqt5