如何在 Python pyqt4 GUI 设计中使用线程



我写了一个简单的python GUI代码,让我的代码休眠10秒。同时,GUI 应在不冻结的情况下运行。通过定义主线程和辅助线程是不可能的吗? 当我单击"运行"按钮pythonw时.exe已停止工作。有没有人对我如何解决这个问题有任何想法?谢谢。

import sys, threading
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import pyqtSlot
from PyQt4.QtGui import *
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window,self).__init__()
self.setGeometry(400,150, 550, 500)
self.setWindowTitle("my first program")
self.home()
def home(self):
self.button_1 = QtGui.QPushButton('Run', self)
self.button_1.resize(60,25)
self.button_1.move(230,230)
self.button_1.clicked.connect(self.Thread_test)
self.textbox_1 = QTextEdit(self)
self.textbox_1.move(15,290)
self.textbox_1.resize(510,170)
self.show()
def Thread_test(self):
t = threading.Thread(target=self.calculation)
t.start()
def calculation(self):
msg="program is working"
self.textbox_1.setText(msg)
time.sleep(5)
msg="program was slept for few sec."
self.textbox_1.setText(msg)
def run():
app=QtGui.QApplication(sys.argv)
GUI=Window()
sys.exit(app.exec_())    
run()

Qt Widgets不是线程安全的。您应该仅从创建它的线程访问小部件。请参阅 http://doc.qt.io/qt-5/thread-basics.html:

所有小部件和几个相关的类 [...] 在辅助线程中不起作用。

您必须通知主 (GUI( 线程才能更新 UI。你可以用信号和插槽来做到这一点。

最新更新