请问这段代码是多线程执行的吗
如果是的话 我发送请求时加入一个延时 为什么截面会卡住呢?
import json
import sys
import time
import requests
from PyQt5.Qt import *
from PyQt5 import uic
class Thread01(QThread):
# 定义一个调子线程函数的信号
thread01_signal = pyqtSignal(str)
def __init__(self, signal):
super(Thread01, self).__init__()
# 信号绑定槽
self.thread01_signal.connect(self.signal_do)
# 拿到主线程定义的那个信号
self.signal_rece = signal
def signal_do(self, user_pwd_json):
user_pwd_dict = json.loads(user_pwd_json)
print(user_pwd_dict.get("username"))
print(user_pwd_dict.get("password"))
# 使用request模块 发送请求(post)
r = requests.post(url="https://service-nmag56oc-1318270601.gz.apigw.tencentcs.com/release/qt_login_test",
json=user_pwd_dict)
print("接收到腾讯服务器响应:", r.content.decode())
ret = r.json()
# 返回数据后发送信号 让主线程执行显示函数
self.signal_rece.emit(json.dumps(ret))
def run(self):
# 让子线程不结束 等待任务 (信号)
while True:
print("子线程01正在执行..")
time.sleep(1)
class MyWindow(QWidget):
# 定义一个线程01返回过来结果之后 调用显示函数的信号
signal_rece = pyqtSignal(str)
def __init__(self):
super(MyWindow, self).__init__()
# 绑定这个信号
self.signal_rece.connect(self.signal_rece_do)
self.init_ui()
def init_ui(self):
self.ui = uic.loadUi("./FeiQQ.ui")
# 获取控件对象
self.username = self.ui.lineEdit
self.password = self.ui.lineEdit_2
self.btn_log = self.ui.pushButton
self.btn_forget_pwd = self.ui.pushButton_2
self.text_browser = self.ui.textBrowser
# 绑定登录函数
self.btn_log.clicked.connect(self.click_log)
# 创建thread01对象 并把返回结果后调用显示函数的信号传过去 以便让子线程拿到返回结果后 触发信号
self.thread01 = Thread01(self.signal_rece)
# 执行这个线程
self.thread01.start()
def click_log(self):
# 拿到账号和密码 发给子线程执行
username = self.username.text()
password = self.password.text()
# 怎么发 那就是子线程创建一个信号 并且可以接受字符串 子线程收到信号 执行子线程中的函数
# 要发这个信号 就要拿到thread01对象中的信号
self.thread01.thread01_signal.emit(json.dumps({"username": username, "password": password}))
def signal_rece_do(self, data):
# 把json字符串变为字典
data = json.loads(data)
# 把返回过来的errmsg显示
self.text_browser.setText(data["errmsg"])
self.text_browser.repaint()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWindow()
w.ui.show()
app.exec()