2011-03-03 6 views
3

프로젝트에 PyQt를 사용하고 있습니다. 하지만 갑자기 오류가 발생하는 것은 아닙니다 :PyQt에서 QPixmap을 사용하지 않습니다. 그러나 나는 QPixmap을 얻습니다. PyQt의 GUI 스레드 외부에서 pixmaps를 사용하는 것은 안전하지 않습니다.

QPixmap: It is not safe to use pixmaps outside the GUI thread in PyQt

내 코드에서 QPixmap을 사용하고 있지 않습니다 ... 도와주세요.

class itemCheckBtn(QtGui.QDialog): 
qApp = None; 
okCallback = None; 
def __init__(self,parent=None): 
    itemCheckBtn.qApp=None; 
    QtGui.QWidget.__init__(self, None) 
    self.ui = Ui_merchantPriceFrom(); 
    self.ui.setupUi(self) 
    QtCore.QObject.connect(self.ui.itemCheckButton, QtCore.SIGNAL("clicked()"), self.submit) 
def submit(self): 
    print "Hi"; 

주요 클래스는

class MyForm(QtGui.QMainWindow): 
    serverThreadObject = None; 
    qApp = None; 
    sock = None; 
    def __init__(self, qApp,parent=None): 
    MyForm.qApp=qApp; 
    QtGui.QWidget.__init__(self, parent) 
    self.ui = Ui_bluwavemerchantmain() 
    self.ui.setupUi(self) 
    self.ui.server_connection_status_label.setText("Server Offline.."); 
    QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.connectUser) 
    QtCore.QObject.connect(self.ui.actionStart_Server, QtCore.SIGNAL("triggered()"), self.startServer); 
    QtCore.QObject.connect(self.ui.actionStop_Server, QtCore.SIGNAL("triggered()"), self.stopServerFromGui); 
    QtCore.QObject.connect(self.ui.actionExit, QtCore.SIGNAL("triggered()"), self.closeEventFromMenu); 
    QtCore.QObject.connect(self, QtCore.SIGNAL("triggered()"), self.closeEvent); 

내가 "MyForm을"클래스에서 클래스 "itemCheckBtn"를 호출하려고 할 때 오류를 얻고있다.

답변

3

스레드를 사용하고있는 것처럼 보입니다. 어떻게 든 주 GUI 스레드가 아닌 다른 스레드에서 GUI를 변경하려고합니다 (허용되지 않습니다). 이는 다소 간접적으로 발생할 수 있습니다. 예를 들어 서버 스레드가 MyForm에서 itemCheckBtn을 업데이트하려고하는 함수를 호출하는 경우입니다. 코드가 MyForm의 일부분이더라도 여전히 이 서버 스레드에서으로 실행됩니다. 대신, GUI 스레드에 변경이 발생했음을 알리고 GUI 작업을 수행하도록 스레드 안전 메커니즘을 사용해야합니다. (http://doc.qt.nokia.com/4.6/threads-qobject.html 참조)

관련 문제