我在Python和PyQt中编写 GUI ,逻辑的某些部分需要在以ms为单位的特定时间间隔内执行。我认为将这些部分作为线程运行并记录时间是最好的,但如果我错了请纠正我。
第二个问题,我可以使用线程作为经典对象并以相同的方式使用它们吗?调用方法或只是将它们用于特定任务并保持尽可能简单?因为从线程性质来看,我经常试图将run()方法编写为程序,并且某种程度上缺乏OOP方法。
由于
答案 0 :(得分:2)
第一部分:
如果代码的定时部分计算量很大,那么在QThread中执行它会很好 - 如果不是,则不需要使事情变得复杂。
正如x3al在评论中所说,没有明显的理由说明你不能使用QTimer进行计时。如果您需要重复信号,可以使用 setInterval 。如果它在X ms之后只有一个信号,你可以使用 singleShot (pyqt4-doc)。
第二部分:
如果我正确地得到这个部分你就是在寻求关于如何使用线程的建议 - 因为这取决于你的实现(movetothread vs subclassing),看看这个答案Background thread with QThread in PyQt
请允许我回收一下我之前使用的一个例子:
class ThreadObject(QObject):
started = pyqtSignal()
finished = pyqtSignal()
def __init__(self, var1, var2):
super(ThreadObject, self).__init__()
self.var1 = var1
self.var2 = var2
self._isRunning = True
def stop(self):
_isRunning = False
def run(self):
# do something with the var's and send the results to where they are needed while _isRunning is True
class UIelement(QWidget):
# initialize, create UI and so on
def clicksomebutton(self):
self.obj = ThreadObject(self.var1, self.var2) # handle copies of vars to object
self.thread = = QThread(self, objectName='workerThread')
self.obj.moveToThread(self.thread)
# connect start, stop, run, etc.
self.thread.start()
希望这能帮到你!