我正在使用PyQt进行项目。但不是突然间我得到一个错误:
QPixmap:在PyQt
中使用GUI线程之外的pixmaps是不安全的
我的代码中没有使用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”时,我收到错误。
答案 0 :(得分:3)
看起来你正在使用线程,并且不知何故你试图从主GUI线程之外的某个线程更改GUI(这是不允许的)。这可能会间接发生 - 例如,您的服务器线程调用MyForm上的函数,该函数尝试更新itemCheckBtn。即使代码是MyForm的一部分,它仍然是从服务器线程执行。相反,您需要使用一些线程安全机制来通知GUI线程发生了更改,并让它执行GUI工作。 (见http://doc.qt.nokia.com/4.6/threads-qobject.html)