3

私はプロジェクトにPyQtを使用しています。しかし、突然エラーが発生するわけではありません。

QPixmap:PyQtのGUIスレッドの外でピックスマップを使用することは安全ではありません

コードのどこにも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」クラスを呼び出そうとすると、エラーが発生します。

4

1 に答える 1

3

スレッドを使用しているようですが、どういうわけか、メインGUIスレッド以外のスレッドからGUIを変更しようとしています(これは許可されていません)。これはやや間接的に発生している可能性があります。たとえば、サーバースレッドがMyFormの関数を呼び出し、itemCheckBtnを更新しようとします。コードはMyFormの一部ですが、サーバースレッドから実行されています。代わりに、スレッドセーフなメカニズムを使用して、変更が発生したことをGUIスレッドに通知し、GUIを機能させる必要があります。(http://doc.qt.nokia.com/4.6/threads-qobject.htmlを参照)

于 2011-03-03T23:42:57.443 に答える