使用QtNetwork和PyQt5检查互联网连接

时间:2018-01-19 14:29:54

标签: python pyqt pyqt5 qtnetwork

我尝试使用if($user->role=='test'){ $user->changeConnection('connection2'); } 以艰难的方式检查网络连接,但无法弄清楚如何正确执行此操作。这就是我正在处理的代码似乎没有调用QtNetworkfinished信号。我在这里失踪了什么?

error

1 个答案:

答案 0 :(得分:1)

问题是由于net_manager被删除引起的,请记住一个变量只存在于创建它的上下文中,在你的情况下net_manager是一个局部变量,当__init__被删除时1}}方法结束。

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