Hello, everyone, I have a twisted use in python. The red part of the problem in the following code.
I want a process a call to the remote server command, but I failed, I can not find the reason, can help?import sys,time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from net.client import FilmStudioClient
from twisted.python import log
def DefaultErrorHandler(exc):
msg = '%s\n\n%s' % (exc.getErrorMessage(), str(exc))
log.msg(msg)
class Window(QWidget):
a = 0
def __init__(self,reactor, parent = None):
QWidget.__init__(self, parent)
self.projects = []
self.reactor = reactor
button = QPushButton(
self.tr("Click me"))
self.resultLabel = QLabel(
self.tr("..."))
self.client = FilmStudioClient(reactor,self.onDisconnected)
# New style: uses the connect method of a pyqtSignal object.
self.connect(button, SIGNAL("clicked()"), self.handleClick)
# Old style: uses the SIGNAL function to describe the signal.
self.connect(self, SIGNAL("sendValue(PyQt_PyObject)"), self.handleValue)
layout = QVBoxLayout(self)
layout.addWidget(button)
layout.addWidget(self.resultLabel)
self.threadPool = []
def connectAnonymous(self):
self.client.connectAnonymous("192.168.0.108",7777).addCallback(self.onConnected).addErrback( DefaultErrorHandler )
def handleClick(self):
#self.connectAnonymous()
self.threadPool.append( GenericThread(self.getP) )
self.disconnect( self, SIGNAL("sendValue(PyQt_PyObject)"), self.handleValue )
self.connect( self, SIGNAL("sendValue(PyQt_PyObject)"), self.handleValue )
self.threadPool[len(self.threadPool)-1].start()
def getP(self):
while True:
time.sleep(1)
#self.connectAnonymous()
# i can not get projects from QThread because getProjects_OK was not run.
self.client.perspective.callRemote( 'getProjects').addCallback(self.getProjects_OK)
#self.client.getProjects().addCallback(self.getProjects_OK).addErrback(self.getProjects_Failed)
self.emit(SIGNAL("sendValue(PyQt_PyObject)"), self.projects)
def handleValue(self, value):
self.resultLabel.setText(repr(value))
def onConnected(self, perspective):
self.connected = True
def onDisconnected(self):
self.connected = False
def getProjects_OK(self,info):
print "get-ok",info,"done"
self.projects = []
for i in info:
print "project:",i
self.projects.append(
i.name)
def getProjects_Failed(self,exc):
print "getProjects_Failed",exc
class GenericThread(QThread):
def __init__(self, function, *args, **kwargs):
QThread.__init__(self)
self.function = function
self.args = args
self.kwargs = kwargs
def __del__(self):
self.wait()
def run(self):
self.function(*self.args,**self.kwargs)
return
def main():
import sys
try:
import qt4reactor
except ImportError:
# Maybe qt4reactor is placed inside twisted.internet in site-packages?
from twisted.internet import qt4reactor
qt4reactor.install()
from twisted.internet import reactor
app = QApplication(sys.argv)
app.setStyle(QStyleFactory.create("Plastique"))
win = Window(reactor)
win.connectAnonymous()
win.show()
reactor.run()