#実現したいこと
ある部屋の入退室を管理する様なGUIアプリケーションを作るために、PySide2とQMLを使って、以下の様なコードを書きました。enterメソッド、exitメソッドは人が入室/退室したことを表現しており、部屋の人数を増減させます。
部屋の入退室をIoTデバイスを使って取得しようと考えているため、pythonでサーバーを立てて外部からHTTPリクエストを受け取る様に変更を加えたいと考えています。
import sys from PySide2 import QtCore, QtWidgets from PySide2.QtQml import QQmlApplicationEngine from PySide2.QtCore import QUrl class Connect(QtCore.QObject): def __init__(self): super().__init__() @QtCore.Slot(int, result=int) def enter(self, arg): return arg + 1 @QtCore.Slot(int, result=int) def exit(self, arg): if(arg == 0): return 0 else: return arg - 1 if __name__ == '__main__': app = QtWidgets.QApplication() myconnect = Connect() engine = QQmlApplicationEngine() bind = engine.rootContext() bind.setContextProperty("Connect", myconnect) engine.load(QUrl("Test1/Test1.qml")) sys.exit(app.exec_())
#試したこと
ひとまず以下の様にコードを変更して、HTTPリクエストを受け取ったら200を返すだけど簡単なpythonサーバーとGUIアプリケーションを別のスレッドで実行することを試しました。しかし、このコードを実行してもGUIアプリケーションは起動されるもののサーバーが立ち上がらず、HTTPリクエストが受け取れない様子でした。
import sys from PySide2 import QtCore, QtWidgets from PySide2.QtQml import QQmlApplicationEngine from PySide2.QtCore import QUrl import threading import http.server import socketserver import json class MyHandler(http.server.BaseHTTPRequestHandler): def do_POST(self): self.send_response(200) self.end_headers() class Connect(QtCore.QObject): def __init__(self): super().__init__() @QtCore.Slot(int, result=int) def enter(self, arg): return arg + 1 @QtCore.Slot(int, result=int) def exit(self, arg): if (arg == 0): return 0 else: return arg - 1 def runServer(): with socketserver.TCPServer(("", 80), MyHandler) as httpd: print("サーバーを起動します") httpd.serve_forever() def runGUIApp(): app = QtWidgets.QApplication() myconnect = Connect() engine = QQmlApplicationEngine() bind = engine.rootContext() bind.setContextProperty("Connect", myconnect) engine.load(QUrl("Test1/Test1.qml")) sys.exit(app.exec_()) if __name__ == '__main__': thread_1 = threading.Thread(target=runServer) thread_2 = threading.Thread(target=runGUIApp()) thread_1.start() thread_2.start()
#実現したいこと
PySide2を使う上で、GUIアプリケーションの裏側でサーバーを立ち上げていろいろな処理が行いたいです。今回は複数のthreadを動かすという手段を試みていますが、もしPySide2で素直に裏側の処理が書ける様な方法があればご教示いただけるとありがたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。