0

PyQt Gui アプリケーションがあります。このアプリケーションには、起動後に開く必要があるメイン ウィンドウがあります。

このアプリケーションは、websocket をリッスンする必要があります。

私はそれを解決しようとしました:

...

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    window = Window()
    window.show()

    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://localhost:8080/chatsocket",
                                on_message = on_message,
                                on_error = on_error,
                                on_close = on_close)
#    ws.on_open = on_open

    ws.run_forever()

    sys.exit(app.exec_())

しかし、アプリケーションを起動した後、メインウィンドウが開いていませんでした。

「ws.run_forever()」行がなければ、メイン ウィンドウは開いていましたが、アプリケーションは websocket をリッスンしません。

「バックグラウンド」で websocket をリッスンする必要がありますか? 手伝って頂けますか?

PS: (私の英語でごめんなさい)

4

1 に答える 1

2

enginefreeに感謝します。

私はこれを作ります

class Window(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__()

        self.thread = ListenWebsocket()
        self.thread.start()

...


class ListenWebsocket(QtCore.QThread):
    def __init__(self, parent=None):
        super(ListenWebsocket, self).__init__(parent)

        websocket.enableTrace(True)

        self.WS = websocket.WebSocketApp("ws://localhost:8080/chatsocket",
                                on_message = self.on_message,
                                on_error = self.on_error,
                                on_close = self.on_close) 

    def run(self):
        #ws.on_open = on_open

        self.WS.run_forever()


    def on_message(self, ws, message):
        print message

    def on_error(self, ws, error):
        print error

    def on_close(self, ws):
        print "### closed ###"

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    QtGui.QApplication.setQuitOnLastWindowClosed(False)

    window = Window()
    window.show()

    sys.exit(app.exec_())
于 2013-03-02T03:55:48.600 に答える