pyqt5调用url时处于无响应状态

2024-05-05

我刚刚在 pyqt 中实现了登录,但在调用 url 和获取响应之间,qt 窗口显示无响应状态 谁能建议我如何避免不响应状态

code:

class Login(QDialog):
    def __init__(self, height, width, parent=None):
        super(Login, self).__init__(parent)
        self.resize(300, 300)
        size = self.geometry()
        self.move((width-size.width())/2, (height-size.height())/2)
        username = QLabel("Username", self)
        username.move(100, 35)
        self.textName = QLineEdit(self)
        password = QLabel("Password", self)
        password.move(100, 110)
        self.textPass = QLineEdit(self)
        self.textPass.setEchoMode(QLineEdit.Password)
        self.buttonLogin = QPushButton('Login', self)
        self.buttonLogin.clicked.connect(self.handleLogin)
        layout = QVBoxLayout(self)
        layout.addWidget(self.textName)
        layout.addWidget(self.textPass)
        layout.addWidget(self.buttonLogin)

    def handleLogin(self):
        # TODO: Connect to flask application to check login credentials
        payload = {"username":self.textName.text(),"password":self.textPass.text()}
        print("payload:", payload)
        r = requests.post("http://127.0.0.1:5000/login",data=payload)
        print(r.content.decode("utf-8"))
        if r.status_code == 200:
            self.accept()
        else:
            QMessageBox.warning(self, 'Error', 'Bad user or password')

1.使用线程:消耗大量时间的任务必须在另一个线程中执行

import requests
from PyQt5 import QtCore, QtWidgets

class LoginWorker(QtCore.QObject):
    logged = QtCore.pyqtSignal(bool)

    def setCredentials(self, username, password):
        self.payload = {"username": username, "password": password}

    @QtCore.pyqtSlot()
    def login(self):
        print("payload:", self.payload)
        r = requests.post("http://127.0.0.1:5000/login",data=self.payload)
        print(r.content.decode("utf-8"))
        status = r.status_code == 200
        self.logged.emit(status)

class Login(QtWidgets.QDialog):
    def __init__(self, height, width, parent=None):
        super(Login, self).__init__(parent)
        self.resize(300, 300)
        size = self.geometry()
        self.move((width-size.width())/2, (height-size.height())/2)

        username = QtWidgets.QLabel("Username")
        self.textName = QtWidgets.QLineEdit()
        password = QtWidgets.QLabel("Password")
        self.textPass = QtWidgets.QLineEdit()
        self.textPass.setEchoMode(QtWidgets.QLineEdit.Password)
        self.buttonLogin = QtWidgets.QPushButton('Login')
        self.buttonLogin.clicked.connect(self.handleLogin)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(username, alignment=QtCore.Qt.AlignCenter)
        layout.addWidget(self.textName)
        layout.addWidget(password, alignment=QtCore.Qt.AlignCenter)
        layout.addWidget(self.textPass)
        layout.addWidget(self.buttonLogin)
        layout.addStretch()

        thread = QtCore.QThread(self)
        thread.start()
        self.login_worker = LoginWorker()
        self.login_worker.moveToThread(thread)
        
        self.login_worker.logged.connect(self.onLogged)

    def handleLogin(self):
        # TODO: Connect to flask application to check login credentials
        self.login_worker.setCredentials(self.textName.text(), self.textPass.text())
        QtCore.QTimer.singleShot(0, self.login_worker.login)

    def onLogged(self, status):
        if status:
            self.accept()
        else:
            QtWidgets.QMessageBox.warning(self, 'Error', 'Bad user or password')

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Login(100, 100)
    w.show()
    sys.exit(app.exec_())

2.使用QNAM:

from PyQt5 import QtCore, QtWidgets, QtNetwork

class Login(QtWidgets.QDialog):
    def __init__(self, height, width, parent=None):
        super(Login, self).__init__(parent)
        self.resize(300, 300)
        size = self.geometry()
        self.move((width-size.width())/2, (height-size.height())/2)

        username = QtWidgets.QLabel("Username")
        self.textName = QtWidgets.QLineEdit()
        password = QtWidgets.QLabel("Password")
        self.textPass = QtWidgets.QLineEdit()
        self.textPass.setEchoMode(QtWidgets.QLineEdit.Password)
        self.buttonLogin = QtWidgets.QPushButton('Login')
        self.buttonLogin.clicked.connect(self.handleLogin)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(username, alignment=QtCore.Qt.AlignCenter)
        layout.addWidget(self.textName)
        layout.addWidget(password, alignment=QtCore.Qt.AlignCenter)
        layout.addWidget(self.textPass)
        layout.addWidget(self.buttonLogin)
        layout.addStretch()

    def handleLogin(self):
        # TODO: Connect to flask application to check login credentials
        postData = QtCore.QUrlQuery()
        postData.addQueryItem("username", self.textName.text())
        postData.addQueryItem("password", self.textPass.text())
        qnam = QtNetwork.QNetworkAccessManager()
        url = "http://127.0.0.1:5000/home"
        reply = qnam.post(QtNetwork.QNetworkRequest(QtCore.QUrl(url)), postData.toString(QtCore.QUrl.FullyEncoded).encode())
        loop = QtCore.QEventLoop()
        reply.finished.connect(loop.quit)
        loop.exec_()
        code = reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute)
        if code == 200:
            self.accept()
        else:
            QtWidgets.QMessageBox.warning(self, 'Error', 'Bad user or password')

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Login(100, 100)
    w.show()
    sys.exit(app.exec_())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyqt5调用url时处于无响应状态 的相关文章

  • 使用python查找txt文件中字母出现的次数

    我需要从 txt 文件中读取该字母并打印 txt 文件中出现的次数 到目前为止 我已经能够在一行中打印内容 但计数有问题 有人可以指导吗 infile open grades txt content infile read for char
  • 将非常大的Python列表输出保存到mysql表中

    我想将 python 生成的列表的输出保存在 mysql 数据库的表中 该表如下所示 mysql 中的 myapc8 表 https i stack imgur com 4B4Hz png这是Python代码 在此输入图像描述 https
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 将 numpy 数组合并为单个 int

    numpy 数组怎么可以这样 10 22 37 45 转换为单个 int32 数字 如下所示 10223745 这可以工作 gt gt gt int join map str 10 22 37 45 10223745 基本上你使用map s
  • Mypy 无法从文字列表推断项目的类型

    我有一个变量x和一个文字列表 例如 0 1 2 我想转换x这些文字之一 如果x在列表中 我将其退回 否则我返回一个后备值 from typing import Literal Set Foo Literal 0 1 2 foos Set F
  • 使用 Boto3 以字符串形式打开 S3 对象

    我知道使用 Boto 2 可以使用以下命令将 S3 对象作为字符串打开 get contents as string http boto readthedocs org en latest ref file html highlight c
  • 无法在 selenium 和 requests 之间传递 cookie,以便使用后者进行抓取

    我用 python 结合 selenium 编写了一个脚本来登录网站 然后从driver to requests这样我就可以继续使用requests进行进一步的活动 I used item soup select one div class
  • 如何过滤 Pandas GroupBy 对象并获取 GroupBy 对象?

    当对 Pandas groupby 操作的结果执行过滤时 它返回一个数据帧 但假设我想执行进一步的分组计算 我必须再次调用 groupby 这似乎有点绕 有更惯用的方法吗 EDIT 为了说明我在说什么 我们无耻地从 Pandas 文档中窃取
  • 协程从未被等待

    我正在使用一个简单的上下文管理器 其中包含一个异步循环 class Runner def init self self loop asyncio get event loop def enter self return self def e
  • 尝试在 Anaconda 上安装 pygame 时,Python 3.x 降级为 Python 2.7

    我正在使用 Anaconda Python 3 我正在尝试安装 pyOpenGL Vpython 和 pygame 安装 pyOpenGL 和 Vpython 就可以使用conda install 当我尝试安装 Pygame 时 使用con
  • Arcpy 模数在 Pycharm 中不显示

    如何将 Arcpy 集成到 Pycharm 中 我尝试通过导入模块但它没有显示 我确实知道该模块仅适用于 2 x python arcpy 在 PyPi Python 包索引 上不可用 因此无法通过 pip 安装 要使用 arcpy 您需要
  • Paste.httpserver 并通过 HTTP/1.1 Keep-alive 减慢速度;使用 httperf 和 ab 进行测试

    我有一个基于paste httpserver 的Web 服务器作为HTTP 和WSGI 之间的适配器 当我使用 httperf 进行性能测量时 如果每次使用 num conn 启动一个新请求 我每秒可以执行超过 1 000 个请求 如果我使
  • 使用 for 循环创建一系列元组

    我已经搜索过 但找不到答案 尽管我确信它已经存在了 我对 python 很陌生 但我以前用其他语言做过这种事情 我正在以行形式读取数据文件 我想将每行数据存储在它自己的元组中 以便在 for 循环之外访问 tup i inLine wher
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • Airflow 1.9 - 无法将日志写入 s3

    我在 aws 的 kubernetes 中运行气流 1 9 我希望将日志发送到 s3 因为气流容器本身的寿命并不长 我已经阅读了描述该过程的各种线程和文档 但我仍然无法让它工作 首先是一个测试 向我证明 s3 配置和权限是有效的 这是在我们
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File
  • 无法通过 Python 子进程进行 SSH

    我需要通过堡垒 ssh 进入机器 因此 该命令相当长 ssh i
  • minizinc python 安装

    我通过 anaconda 提示符在 python 上安装了 minizinc 就像其他软件包一样 pip install minizinc 该软件包表示已成功安装 我可以导入该模块 但是 我正在遵循基本示例https minizinc py
  • rpy2 无法加载外部库

    希望有人能帮忙解决这个问题 R版本 2 14 1rpy2版本 2 2 5蟒蛇版本 2 7 3 一直在尝试在 python 脚本中使用 rpy2 加载 R venneuler 包 该包以 rJava 作为依赖项 venneuler 和 rJa
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发

随机推荐