Куда поместить реактор.run () в приложении PyQt? - PullRequest
0 голосов
/ 11 июля 2019

Возникают проблемы с отображением окна / подключения к серверу в зависимости от расположения реактора.run ()

Если я размещаю реактор.Сервер чата регистрирует соединение как успешное, но пользовательский интерфейс не загружается.Если после sys.exit (app.exec _ ()) установить processor.run () , клиент не сможет подключиться, даже если пользовательский интерфейс загружается.

Какое лучшее решение?

from __future__ import print_function
from PyQt5 import QtCore, QtGui, QtWidgets
from twisted.internet import protocol
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor

from twisted.application import service, internet

class Ui_MainWindow(object):

    #Note actual code lives here

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

    #prepare the chat 
    reactor.connectTCP("localhost",1025,ChatClientFactory())
    reactor.run()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.lineEdit_2.setText(_translate("MainWindow", "    Search "))
        self.pushButton.setText(_translate("MainWindow", "Send"))





class ChatClient(LineReceiver):

    def __init__(self, factory):
        self.factory = factory

    def lineReceived(self, data):
        self.factory.text_from_patient = "{:>10}".format(data) # store the data so we can write to textedit

        self.textEdit.appendPlainText("\n"+ self.factory.text_from_patient)


class ChatClientFactory(protocol.ClientFactory):
    text_from_patient = " " # text to contain data sent from the user

    def buildProtocol(self, addr):
        return ChatClient(self)


    def clientConnectionFailed(self, connector, reason):
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        reactor.stop()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()


    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 11 июля 2019

Используйте реактор qt5 и reactor.run обычным способом.

...