Pyqt5 代理类型对该操作无效
Posted
技术标签:
【中文标题】Pyqt5 代理类型对该操作无效【英文标题】:Pyqt5 the proxy type is invalid for this operation 【发布时间】:2021-09-03 13:18:57 【问题描述】:我以前使用that 代码,它对我有用。 但是现在,有些事情发生了变化,我遇到了这个错误:
the proxy type is invalid for this operation
我发现如果代理设置关闭它仍然可以工作,但是我应该怎么做才能解决这个代理问题?
这是我使用的代码示例:
from functools import cached_property
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork
class Client(QtCore.QObject):
messageChanged = QtCore.pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.socket.stateChanged.connect(self.handle_state_changed)
self.socket.errorOccurred.connect(self.handle_error_occurred)
self.socket.readyRead.connect(self.handle_ready_read)
@cached_property
def socket(self):
return QtNetwork.QTcpSocket()
def try_connect(self):
self.socket.connectToHost("127.0.0.1", 5555)
def handle_state_changed(self, state):
print(f"state: state")
if state == QtNetwork.QAbstractSocket.UnconnectedState:
print("disconnected")
QtCore.QTimer.singleShot(1000, self.try_connect)
elif state == QtNetwork.QAbstractSocket.ConnectedState:
print("connected")
def handle_error_occurred(self, error):
print(f"error code error, message: self.socket.errorString()")
def handle_ready_read(self):
codec = QtCore.QTextCodec.codecForName("UTF-8")
message = codec.toUnicode(self.socket.readAll())
self.messageChanged.emit(message)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.client.messageChanged.connect(self.handle_message_changed)
self.client.try_connect()
@cached_property
def client(self):
return Client()
def handle_message_changed(self, message):
print(f"client message: message")
def main():
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
我也看到了issue,但我不明白如何在我的代码中使用它。
【问题讨论】:
您是否在问如何绕过现有代理使其工作?似乎链接的解决方案是您应该做的,还有什么不清楚的地方? @musicamante 是的,我知道如何使它与现有代理一起工作。我无法关闭 Windows 上的代理设置。 【参考方案1】:我想通了。我应该在连接之前设置一个“NoProxy”类型。就像在that 主题中一样。
我的例子:
class Client(QtCore.QObject):
messageChanged = QtCore.pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.proxy = QtNetwork.QNetworkProxy(QtNetwork.QNetworkProxy.NoProxy)
self.socket.stateChanged.connect(self.handle_state_changed)
self.socket.errorOccurred.connect(self.handle_error_occurred)
self.socket.readyRead.connect(self.handle_ready_read)
@cached_property
def socket(self):
return QtNetwork.QTcpSocket()
def try_connect(self):
self.socket.setProxy(self.proxy)
self.socket.connectToHost("ADDRESS", PORT)
这对我有用。
【讨论】:
以上是关于Pyqt5 代理类型对该操作无效的主要内容,如果未能解决你的问题,请参考以下文章