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上阅读或观看的内容?