socket.recv()の待機時間中に、PyQt5のプログレスバーを進めたい
実現したいこと
PyQT5を使って簡単なGUIを作っています。
その際、ソケット通信を行いサーバから受け取ったデータをGUI上に表示しようと思っています。
そこで、socketモジュールのsocket.recv()を使ってデータを受けとるようにしましたが、
socket.recv()の待機時間が10秒ほどあり、その間、プログレスバーで時間経過を表示したいです。
実装したコード
以下のようにコードを実装してみましたが、
socket.recv()の待機時間中はプログレスバーが止まってしまいます。
具体的な改善点などして頂けると助かります。
import socket
import sys
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit,
QTextEdit, QGridLayout, QApplication, QPushButton, QProgressBar, QSizePolicy)
from PyQt5.QtCore import QBasicTimer
import threading
class Example(QWidget)
def __init__(self):
self.button = QPushButton("Run!")
self.button.clicked.connect(self.threading_wrapper)
self.pbar = QProgressBar(self) #18/06/22 追記
self.pbar.setGeometry(30, 40, 200, 25) #18/06/22 追記
self.step = 0 #18/06/22 追記
self.timer = QBasicTimer() #18/06/22 追記
def threading_wrapper(self):
thread = threading.Thread(target=self.send_socket)
thread.daemon = True
thread.start()
def send_socket(self):
...
self.timer.start(100, self) # 18/06/22 追記
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 18/06/22 追記
s.connect((TCP_IP, TCP_PORT)) # 18/06/22 追記
s.send(msg.encode('utf-8')) # 18/06/22 追記
r = socket.recv()
self.timer.stop() # 18/06/22 追記
...
def timeEvent(self, e):
self.step = self.step + 1 # 18/06/22 追記
self.pbar.setValue(self.step) # 18/06/22 追記
if self.step > 100: # 18/06/22 追記
self.timer.stop() # 18/06/22 追記