У меня есть 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
Я не использую синтаксис старого стиля для сигналов и слотов.
Вы можете использовать новый стиль:
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-.
Вам нужно инициализировать базовый QObject в вашем классе MCCommunication. Добавьте эту строку в начало метода __init__
:
super(MCCommunication,self).__init__()
__init__
при создании подклассов и переопределении__init__
.