Сигналы в PyQT4 - PullRequest
       32

Сигналы в PyQT4

1 голос
/ 09 июня 2011

У меня есть графический интерфейс, и я хочу установить связь между двумя классами

    .
    .
    .
    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 следующий:

class 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 ]

4 голосов
/ 09 июня 2011

Вам необходимо инициализировать базовый объект QObject в вашем классе MCCommunication.Добавьте эту строку в начало метода __init__:

super(MCCommunication,self).__init__()
2 голосов
/ 09 июня 2011

Я не использую синтаксис старого стиля для Сигнала и Слотов.
Вы можете использовать новый стиль:

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)

ОБНОВЛЕНО:Я добавил предложение Стивена Терри.

PS («прослушивание TCPServer») не является кортежем.В нем отсутствует запятая.
(«прослушивание TCPServer» , ) - это одноэлементный кортеж.

...