gpt4 book ai didi

python - 非 react 器线程中的扭曲传输.write

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:46 24 4
gpt4 key购买 nike

我正在设计一个 gui 应用程序作为我有 3 个类的服务器的客户端

一个用于扭曲协议(protocol)的类,另一个用于工厂,第三个用于它自己的 pyqt 线程。我如何从 pyqt 线程发送数据,例如,如果单击了一个按钮,我如何使用当前的扭曲连接发送命令,这是我的代码的副本

from OpenSSL import SSL;import sys
from twisted.internet.protocol import ClientFactory
from twisted.internet import ssl, protocol
from PyQt4 import QtCore, QtGui
from gui import Ui_clientgui

class clientgui(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_clientgui()
self.ui.setupUi(self)

def closeEvent(self, e):
try:reactor.callFromThread(reactor.stop)
except:pass

class Client(protocol.Protocol):
def connectionMade(self):
global server_options
server_options['connection'] = True

def send(self,data):
self.transport.write(data)

def connectionLost(self, reason):
server_options['connection'] = False

def dataReceived(self, line):
print "receive:", line

class ClientFactory(ClientFactory):
protocol = Client
def clientConnectionFailed(self, connector, reason):
print 'connection failed'
try:reactor.stop()
except:pass

if __name__ == '__main__':
app = QtGui.QApplication([])
import qt4reactor
qt4reactor.install()
from twisted.internet import reactor
factory = ClientFactory()
reactor.connectSSL('localhost', 8080, factory, ssl.ClientContextFactory())
application = clientgui(reactor)
application.show()
reactor.runReturn()
sys.exit(app.exec_())

最佳答案

如果您使用 qt4reactor ,你根本不需要去搞多线程; Twisted 将在 QT 线程中运行,它们可以自由接触彼此的数据结构。

如果您想对线程执行此操作,您的示例已经包含解决方案:reactor.callFromThread。 (我建议使用 callFromThread(client.send) 而不是 callFromThread(transport.write) 因为 Client 是一个 Protocol 因此更多地生活在 Twisted 的世界中而不是 Qt 的世界中。

关于python - 非 react 器线程中的扭曲传输.write,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com