信号未连接到方法

Posted

技术标签:

【中文标题】信号未连接到方法【英文标题】:Signal not connecting to a method 【发布时间】:2015-06-25 16:27:21 【问题描述】:

我正在使用套接字。当我从服务器接收信息时,我使用线程中的方法listen 处理它。我想从这里弹出窗口,所以我使用信号。

问题是信号没有触发函数。这是一个工作示例:

class Client(QtCore.QObject):
    signal = QtCore.pyqtSignal()

    def __init__(self):
        super(Client, self).__init__()
        self.thread_wait_server = threading.Thread(target=self.wait_server)
        self.thread_wait_server.daemon = True
        self.thread_wait_server.start()

    def wait_server(self):
        print('waiting')
        self.signal.emit()
        print("'signal emited")


class Main:
    def Do(self):
        print("'Do' starts")
        self.Launch()
        time.sleep(2)
        print("'Do' ends")

    def Launch(self):
        print("'Launch' starts")
        self.client = Client()
        self.client.signal.connect(self.Tester)
        print("'Launch' ends")

    def Tester(self):
        print("Tester Fired!!")

m = Main()
m.Do()

永远不会触发测试功能。

【问题讨论】:

【参考方案1】:

您的代码的问题在于,您在将信号连接到插槽之前就发出了信号!像这样添加两个打印语句:

print("connecting the signal")
self.client.signal.connect(self.Tester)
print("signal connected")

您会注意到信号在连接之前就已发出!这就是插槽没有触发的原因。

【讨论】:

以上是关于信号未连接到方法的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 WebSockets 测试应用程序未连接到测试服务

使用 qdbus 连接到信号

QtQuick2 无法将 ApplicationWindow 关闭信号连接到方法(C++ 新手)

将 QML 信号连接到 PySide2 插槽

是否可以连接到 QApplication 通知信号?

Python PyQt4 信号未触发连接方法