PyQt5信号无法连接

2024-09-25 02:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我目前正在开发一个PyQT5GUI,我已经花了几个小时来研究它。 我想要signal1连接到slot3,但什么也没发生。我真的很困惑。为什么它不能连接到slot3

import sys

from PyQt5 import QtCore as core
from PyQt5 import QtWidgets as widget


class MainApp(widget.QApplication):
    def __init__(self, argv):
        widget.QApplication.__init__(self, argv)
        self.window1 = Window1()
        self.window2 = Window2()
        self.window1.signal1.connect(self.window2.slot3)


class Window1(widget.QMainWindow):
    signal1 = core.pyqtSignal()
    signal2 = core.pyqtSignal()

    def __init__(self):
        widget.QMainWindow.__init__(self)
        self.slot1()
        self.show()

    def slot1(self):
        self.signal1.emit()
        print('slot1 connected')

    def slot2(self):
        print('slot2 connected')


class Window2(widget.QMainWindow):
    signal3 = core.pyqtSignal()
    signal4 = core.pyqtSignal()

    def __init__(self):
        widget.QMainWindow.__init__(self)
        self.show()

    def slot3(self):
        print('slot3 connected')

    def slot4(self):
        print('slot4 connected')


if __name__ == '__main__':
    app = MainApp(sys.argv)
    sys.exit(app.exec_())

Tags: coreimportselfinitdefsyswidgetclass
1条回答
网友
1楼 · 发布于 2024-09-25 02:24:59

导致该问题的原因是信号在连接之前发出。在给定时刻发出的信号只会被以前连接过的插槽听到,不会通知新连接

一种可能的解决方案是使用QTimer:

core.QTimer.singleShot(0, self.signal1)

在代码中,QTimer.singleShot(0, ...)在eventloop控制之后的一瞬间被调用,这是在执行同步逻辑之后的一瞬间(其中连接代码为)

相关问题 更多 >