擅长:python、mysql、java
<p>你的例子能起作用纯属侥幸。在</p>
<p>当您试图调用<code>QtCore.QApplication.processEvents()</code>时,将引发一个<code>NameError</code>,因为<code>QApplication</code>类实际上在<code>QtGui</code>模块中,而不是{<cd5>}模块中。但是,引发异常的副作用是阻止对<code>scanner</code>对象进行垃圾回收,因此线程似乎正常运行。在</p>
<p>修复代码的正确方法是保留对<code>scanner</code>对象的引用,并去掉<code>processEvents</code>行,这是不需要的:</p>
<pre><code>def scan(self):
self.th = QtCore.QThread()
# keep a reference to the scanner
self.scanner = Scanner(r"D:\\")
self.scanner.moveToThread(self.th)
self.scanner.folderFound.connect(self.addFolder)
self.scanner.done.connect(self.scanner.deleteLater)
self.scanner.done.connect(self.quit)
self.th.started.connect(self.scanner.scan)
self.th.start()
</code></pre>
<p>剩下的代码没问题,示例现在可以按预期工作了。在</p>