擅长:python、mysql、java
<p>原始代码不能工作的原因是禁止从辅助线程调用qtgui方法(Qt方法不是线程安全的)。有几种解决方法,例如:</p>
<ul>
<li><p>使用<code>QTimer</code>(由于<code>QTimer</code>不使用线程,只在主线程中存在的Qt event循环中对将来的事件进行排队,此解决方案应该解决segfaults-请参阅<a href="https://stackoverflow.com/a/44356684/1994235">@ingvar</a>)的答案。</p></li>
<li><p>使用<code>QThread</code>和自定义Qt信号。Qt信号是线程安全的,因此可以将辅助线程中的信号连接到主线程中的<code>close</code>插槽。然后,您可以在30秒后从次线程中发出信号来触发关闭。</p></li>
</ul>
<p>你应该采取的方法取决于你的最终目标(以及这是一个多么“玩具”的例子),但目前我认为没有理由有第二个线程。你应该接受@ingvar的回答:)</p>
<p>不管怎样,在Qt中使用python线程都是个坏主意。坚持使用<code>QThread</code>,除非线程完全独立于GUI。在</p>