2011-06-09 71 views
1

我有我的GUI和欲estamblish两级信号PyQt4中

. 
    . 
    . 
    mainWidget = QtGui.QWidget() 
    mainWidget.setLayout(mainLayout) 
    self.setCentralWidget(mainWidget) 
    self.show() 

    """  Creating class  """ 
    self.server = MCCommunication.MCCommunication() 
    self.connect(self.server, QtCore.SIGNAL("textUpdated"), self.insertText); 
    sys.exit(self.app.exec_()) 

的MCCommunication类之间一些通信是以下内容:

类MCCommunication(QtCore.QObject): ''” classdocs ''”

def __init__(self): 
    ''' 
    Constructor 
    ''' 
    HOST, PORT = socket.gethostbyname(socket.gethostname()), 31000 
    self.server = SocketServer.ThreadingTCPServer((HOST, PORT), MCRequestHandler) 
    ip, port = self.server.server_address 

    # Start a thread with the server 
    # Future task: Make the server a QT-Thread... 
    self.server_thread = threading.Thread(target = self.server.serve_forever) 
    self.server_thread.start() 
    self.emit(QtCore.SIGNAL("textUpdated"), ("TCPServer listening on")) 

,但我得到了以下错误:

self.emit(QtCore.SIGNAL("textUpdated"), ("TCPServer listening on")) 
RuntimeError: underlying C/C++ object has been deleted 

回答

2

我不使用老式的信号和插槽语法。
可以使用新的风格:

class MCCommunication(QtCore.QObject): 
    textUpdated = pyqtSignal(str) 
    def __init__(self): 
     super(MCCommunication,self).__init__() 
     ... 
     self.textUpdated.emit("TCPServer listening on") 

在GUI实例:

self.server.textUpdated.connect(self.insertText) 

更新:我加入了斯蒂芬·特里的建议。

P.S. (“TCPServer监听”)不是一个元组。它缺少逗号。
(“侦听的TCPServer”,)是一个元素的元组。

4

您需要初始化MCCommunication类中的基础QObject。将此线添加到__init__方法的开头:

super(MCCommunication,self).__init__() 
+0

+1。永远不要忘记在继承和重写'__init__'时调用超级'__init__'方法。 – Jeannot 2011-06-10 08:03:15