对象与线程对象Python
我正在用Python和PyQt编写GUI,其中一些逻辑部分需要在以毫秒为单位的特定时间间隔内执行。我认为将这些部分作为线程运行并跟踪时间是最好的,但如果我错了,请纠正我 第二个问题,我可以将线程用作经典对象,并以相同的方式使用它们吗?调用方法,或者只是将它们用于特定的任务,并使它们尽可能简单?因为从线程的本质上看,我通常倾向于将run()方法作为过程来编写,但却缺少面向对象的方法 谢谢第一部分: 如果代码的计时部分计算量很大,那么最好在QThread中执行,否则就不需要使事情复杂化 正如x3al在评论中所说,没有明显的理由说明您不能使用QTimer进行计时。如果需要重复信号,可以使用setInterval。如果是关于X ms后的单个信号,则可以使用singleShot() 第二部分: 如果我正确理解了这一部分,那么您是在询问关于如何使用线程的建议——因为这取决于您的实现(movetothread vs subclassing),请看下面的答案 请允许我再举一个我以前在这个问题上使用过的例子:对象与线程对象Python,python,multithreading,oop,Python,Multithreading,Oop,我正在用Python和PyQt编写GUI,其中一些逻辑部分需要在以毫秒为单位的特定时间间隔内执行。我认为将这些部分作为线程运行并跟踪时间是最好的,但如果我错了,请纠正我 第二个问题,我可以将线程用作经典对象,并以相同的方式使用它们吗?调用方法,或者只是将它们用于特定的任务,并使它们尽可能简单?因为从线程的本质上看,我通常倾向于将run()方法作为过程来编写,但却缺少面向对象的方法 谢谢第一部分: 如果代码的计时部分计算量很大,那么最好在QThread中执行,否则就不需要使事情复杂化 正如x3al
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()
希望这对你有帮助 为什么不使用QtCore.QTimer?谢谢你的提示。但是QTimer不只是用于触发特定时间间隔后的事件吗?我需要更深入一点,但我还需要跟踪应用程序开始时的时间,读取文件作为带有时间戳的消息源,如果时间戳与经过的时间匹配,则发送消息。谢谢!我将使用QTimer并根据“time\u from\u file-current\u time”设置要触发的QTimer。我已经在使用QThread了,但我想我对使用它们的正确方法有点困惑。