python - 如何有两个事件循环?

标签 python pyside

我正在使用 PySide 和这个 IRC 库(https://bitbucket.org/jaraco/irc)在 Python 中制作一个 GUI IRC 客户端。 PySide 有一个主循环来处理 GUI 事件。 IRC 库还有一个循环来处理 IRC 事件。两个循环都在调用后阻塞。我应该怎么办?它只是在不同的线程中运行它们吗?

最佳答案

IRC 客户端类通过on_connecton_disconnecton_schedule 参数支持外部主循环集成。在 PySide 中,您将使用它们分别创建一个 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_()

关于python - 如何有两个事件循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907941/

相关文章:

python - 合并两个具有部分列名称匹配的数据框

python - 来自 Pandas 数据框的共现矩阵

python - Pyinstaller 未加载 DLL

python - 从 pyside/opencv 访问网络摄像头

python - 带有 while 循环的 pyside qapplication exec

python - 如何将多线程与 PySide 和 Twython 结合使用?

python - 将 Cython 中的 C 结构包装/转换为 Python 类

python - 如何在 Pandas 数据框中查找 "?"值

python - parent() 或 super() 获取父对象?

python - 如何重新实现Qt生成的Ui_MainWindow