Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用QtNetwork和PyQt5检查internet连接_Python_Pyqt_Pyqt5_Qtnetwork - Fatal编程技术网

Python 使用QtNetwork和PyQt5检查internet连接

Python 使用QtNetwork和PyQt5检查internet连接,python,pyqt,pyqt5,qtnetwork,Python,Pyqt,Pyqt5,Qtnetwork,我试图用QtNetwork艰难地检查网络连通性,但无法找到正确的方法。这是我正在处理的代码,似乎既没有调用完成也没有调用错误信号。我错过了什么 import sys from PyQt5 import QtCore, QtNetwork, QtWidgets class CheckConnectivity: def __init__(self): url = QtCore.QUrl("https://www.google.com/") req = Qt

我试图用
QtNetwork
艰难地检查网络连通性,但无法找到正确的方法。这是我正在处理的代码,似乎既没有调用
完成
也没有调用
错误
信号。我错过了什么

import sys
from PyQt5 import QtCore, QtNetwork, QtWidgets


class CheckConnectivity:
    def __init__(self):
        url = QtCore.QUrl("https://www.google.com/")
        req = QtNetwork.QNetworkRequest(url)
        net_manager = QtNetwork.QNetworkAccessManager()
        self.res = net_manager.get(req)
        self.res.finished.connect(self.processRes)
        self.res.error.connect(self.processErr)
        self.msg = QtWidgets.QMessageBox()

    def processRes(self):
        if self.res.bytesAvailable():
            self.msg.information(self, "Info", "You are connected to the Internet.")
        else:
            self.msg.critical(self, "Info", "You are not connected to the Internet.")
        self.msg.show()
        self.res.close()

    def processErr(self, *args):
        print(*args)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ic = CheckConnectivity()
    sys.exit(app.exec_())

问题的原因是删除了
net\u manager
,请记住,变量仅存在于创建它的上下文中,在您的情况下,
net\u manager
是一个局部变量,当
\uuuuu init\uuu
方法结束时将被删除

class CheckConnectivity(QtCore.QObject):
    def __init__(self, *args, **kwargs):
        QtCore.QObject.__init__(self, *args, **kwargs)
        url = QtCore.QUrl("https://www.google.com/")
        req = QtNetwork.QNetworkRequest(url)
        self.net_manager = QtNetwork.QNetworkAccessManager()
        self.res = self.net_manager.get(req)
        self.res.finished.connect(self.processRes)
        self.res.error.connect(self.processErr)
        self.msg = QtWidgets.QMessageBox()

    @QtCore.pyqtSlot()
    def processRes(self):
        if self.res.bytesAvailable():
            self.msg.information(None, "Info", "You are connected to the Internet.")
        self.res.deleteLater()

    @QtCore.pyqtSlot(QtNetwork.QNetworkReply.NetworkError)
    def processErr(self, code):
        self.msg.critical(None, "Info", "You are not connected to the Internet.")
        print(code)

建议使用
pyqtSlot()
装饰器,因为它的使用有助于应用程序更快一些,消耗更少的内存,但为此类必须从
QObject

@ellainesc继承,感谢您对我的代码提出宝贵的建议和宝贵的贡献。代码工作正常,但如何减少超时量。现在需要4-5秒才能将关键消息发送到popsup@eyllansec谢谢,我将使用
QTimer
。您是否知道pyqt5上有任何最新资源?@Eylansec有任何书籍或视频或任何您建议在pyqt5上阅读或观看的内容?