<p>使用“functools”模块中的“partial”可以将变量视为可调用变量,然后可以使用该变量将参数传递给Worker。原话如下:</p>
<pre><code>thrWorker.started.connect(objWorker.looper)
</code></pre>
<p>以及修改后的线条:</p>
^{pr2}$
<p>现在重新编写整个存根以合并更改:</p>
<pre><code>def pre_Flight_Check():
count = 0
strIs = "is: " # NOTE: this is only here to show that more than 1 variable can be included
fire_Up_Thread(count,strIs) # 2 vars to pass
#=====================
def butStop_click():
flagQuit = flagQuit + 1
#=====================
# Worker:
class Worker(QObject):
finished = pyqtSignal()
intCount = pyqtSignal(int)
@pyqtSlot()
def looper(self,count,strIs): # Both vars - "count" and "strIs"
flagQuit = 0
while (count < 5):
strCount = "The count " + strIs + str(count)
self.intCount.emit(count)
time.sleep(1)
count = count + 1
# User clicked "Stop" button
if flagQuit != 0:
break
self.finished.emit()
#========================
objWorker = Worker()
thrWorker = QThread()
#========================
# Threading stuffs:
def fire_Up_Thread(count,strIs): # Passed in from "pre_Flight_Check"
from functools import partial
objWorker.moveToThread(thrWorker)
thrWorker.started.connect(partial(objWorker.looper,count,strIs)) # All vars are appended to connected target
objWorker.intCount.connect(updateTextBox)
objWorker.finished.connect(thrWorker.quit)
objWorker.finished.connect(work_finished)
# Start the thread:
thrWorker.start()
</code></pre>
<p>这是有效的,它是线程安全的,它的速度很快,处理成本非常低。在</p>