我嘗試使用SIGNAL從線程接收到主線程的字符串。一切正常,直到我想在QMessageBox中使用字符串。打印出來是沒有問題的,但開始QMessageBox提示給我幾個錯誤(有些是關於QPixmap的,我甚至在GUI中不使用將信號傳遞給QMessageBox時發生PyQT線程錯誤
這裏是我的代碼很短的工作,例如:
import sys
import urllib2
import time
from PyQt4 import QtCore, QtGui
class DownloadThread(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
def run(self):
time.sleep(3)
self.emit(QtCore.SIGNAL("threadDone(QString)"), 'test')
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.list_widget = QtGui.QListWidget()
self.button = QtGui.QPushButton("Start")
self.button.clicked.connect(self.start_download)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.list_widget)
self.setLayout(layout)
self.downloader = DownloadThread()
self.connect(self.downloader, QtCore.SIGNAL("threadDone(QString)"), self.threadDone, QtCore.Qt.DirectConnection)
def start_download(self):
self.downloader.start()
def threadDone(self, info_message):
print info_message
QtGui.QMessageBox.information(self,
u"Information",
info_message
)
#self.show_info_message(info_message)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.resize(640, 480)
window.show()
sys.exit(app.exec_())
我「M得到這個誤差修改:
的QObject ::的setParent:無法設置父,新的父是在不同的線程
的QPixmap:這是不是安全使用外像素圖GUI線程
僅在移動鼠標和QMessageBox提示仍是開此錯誤:
的QObject :: startTimer所:定時器不能從另一個線程開始
的QApplication:對象事件過濾器不能在不同的線程中。
誰能告訴我什麼,我做錯了什麼?
這是我第一次使用線程。
謝謝! Stefanie
非常感謝,這解決了問題! – snowflake