# [...] class CCurrencyThread(QtCore.QThread): calculated = QtCore.Signal(str) def __init__(self): super(CCurrencyThread, self).__init__() self.mProxy = xmlrpclib.ServerProxy("http://foxrate.org/rpc/") # [...] def setArgs(self, pCurSrc, pCurDst, pVal): # [...] def run(self): lResult = self.mProxy.foxrate.currencyConvert(\ self.mCurSrc, \ self.mCurDst, \ self.mVal) if lResult['message'] != '"N/A"': self.calculated.emit(str(lResult['amount'])) else: self.calculated.emit('') # Create a class for our main window class Gui_Qt(QtGui.QMainWindow): def __init__(self, parent=None): super(Gui_Qt, self).__init__(parent) self.mThread = CCurrencyThread() self.mMutex = QtCore.QMutex() # [...] self.mThread.calculated.connect(self.on_thread_calculated, QtCore.Qt.QueuedConnection) def on_actionExit_triggered(self): while self.mThread.isRunning() == True: QtCore.QThread.msleep(100) self.close() def on_processButton_clicked(self): if self.mMutex.tryLock() == True: self.mThread.setArgs( self.customwidget.sourceCurrency.text(), self.customwidget.destinationCurrency.text(), int(self.customwidget.value.text())) self.mThread.start() def on_thread_calculated(self, pAmount): if pAmount == '': self.customwidget.result.setText("") self.customwidget.status.setText("Fehler!") else: self.customwidget.result.setText(str(pAmount)) self.customwidget.status.setText("OK") self.mMutex.unlock() # [...]