Я не использую QPixmap, в PyQt. но я получаю QPixmap: небезопасно использовать растровые изображения вне потока GUI в PyQt - PullRequest
3 голосов
/ 04 марта 2011

Я использую PyQt для проекта. Но не внезапно я получаю сообщение об ошибке:

QPixmap: небезопасно использовать растровые изображения вне потока GUI в 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);

Я получаю сообщение об ошибке при попытке вызвать класс "itemCheckBtn" из класса "MyForm".

1 Ответ

3 голосов
/ 04 марта 2011

Похоже, что вы используете потоки, и каким-то образом вы пытаетесь изменить GUI из какого-либо другого потока, кроме основного потока GUI (это недопустимо).Это может происходить несколько косвенно - например, ваш серверный поток вызывает функцию в MyForm, которая пытается обновить itemCheckBtn.Несмотря на то, что код является частью MyForm, он все еще выполняется из потока сервера.Вместо этого вам нужно использовать некоторый потокобезопасный механизм, чтобы сообщить потоку GUI о том, что произошло изменение, и позволить ему выполнять работу GUI.(см. http://doc.qt.nokia.com/4.6/threads-qobject.html)

...