我正在使用 PySide 和这个 IRC 库(https://bitbucket.org/jaraco/irc)在 Python 中制作一个 GUI IRC 客户端。PySide 有一个处理 GUI 事件的主循环。IRC 库也有一个循环来处理 IRC 事件。两个循环在调用后都会阻塞。我该怎么办?它只是在不同的线程中运行它们吗?
问问题
459 次
2 回答
1
客户端类通过,和参数IRC
支持外部主循环集成。在 PySide 中,您将使用这些来创建 a 、销毁它并分别设置 a :on_connect
on_disconnect
on_schedule
QSocketNotifier
QTimer
class PySideIRCClient(IRC):
def __init__(self):
self.socket_notifiers = {}
return IRC(self.on_connect, self.on_disconnect, self.on_schedule)
def on_connect(self, socket):
notifier = QtCore.QSocketNotifier(socket, QtCore.QSocketNotifier.Read)
notifier.activated.connect(self.socket_activated)
self.socket_notifiers[socket] = notifier
def socket_activated(self, socket):
self.process_data([socket])
def on_disconnect(self, socket):
self.socket_notifiers[socket].setEnabled(False)
del self.socket_notifiers[socket]
def on_schedule(self, seconds):
QtCore.QTimer.singleShot(seconds * 1000, self.process_timeout)
然后PySideIRCClient
将其与 PySide Qt 事件循环集成,因此您只需使用QtGui.QApplication.exec_()
.
于 2013-04-09T18:11:45.830 回答
0
from that client 是 from的IRCServer
派生类TCPServer
,它提供serve_forever
启动循环的方法。有一种替代方法,handle_request
它将处理单个请求(如果有的话)。
serve_forever
基本上这样做,在一个循环中(它实际上调用了一个较低级别的方法)。您可以设置QTimer
轮询 IRCserver,例如。每 0.5 秒(默认为serve_forever
)。还将服务器的超时设置为 0,以避免最终锁定并完成。
于 2013-04-09T17:28:35.260 回答