신호를 사용하여 주 GUI에 스레드 문자열을 수신하려고했습니다. QMessageBox에서 문자열을 사용할 때까지 모든 것이 잘 작동합니다. 밖으로 인쇄하는 것은 문제가되지 않습니다하지만 QMessageBox를 시작하면 일부는 심지어 GUI에 사용하지 않는 QPixmap에 대해입니다 (나에게 몇 가지 오류를 제공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_())
I
QObject를 :: setParent가 불려 갔을 때 :이하는 오류 받고 있어요 설정할 수 없습니다 부모, 새로운 부모는 다른 스레드에
QPixmap : 외부 픽스맵을 사용하는 것이 안전하지 않습니다 GUI 스레드
마우스를 이동하고 QMessageBox가 열려있는 동안 만이 오류 :
가 에게 는가QObject를이 ::가 startTimer가 : 타이머가 다른 스레드에서 시작할 수 없습니다 것은
의 QApplication : 개체 이벤트 필터가 될 수 없다 다른 스레드에서.
누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?
스레드를 처음 사용하는 경우입니다.
감사합니다. 스테파니
대단히 고맙습니다. 문제가 해결되었습니다. – snowflake