Сигналы в PyQT4

1

У меня есть GUI, и я хочу посчитать сообщение между двумя классами

    .
    .
    .
    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
Теги:
signals
pyqt

2 ответа

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" ,) является корневым элементом one-.

4

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

super(MCCommunication,self).__init__()
  • 0
    +1. Никогда, никогда не забывайте вызывать метод super __init__ при создании подклассов и переопределении __init__ .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню