PySide (Qt) 信号未到达我的插槽

Posted

技术标签:

【中文标题】PySide (Qt) 信号未到达我的插槽【英文标题】:PySide (Qt) signal not reaching my slot 【发布时间】:2012-12-18 05:25:04 【问题描述】:

我有这个不起作用的简化代码,我不明白为什么......我希望每次按下我的QTextEdit 中的一个键时都会调用MySlot.slt(),但它没有!你能看看吗?

#!/usr/bin/env python2

import sys
from PySide import QtGui, QtCore

class MySlot(object):
    def __init__(self, qte):
        qte.textChanged.connect(self.soc)

    def slt(self):
        print("got signal")

class MainWid(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MainWid, self).__init__(parent)
        self.initgui()

    def initgui(self):
        lay = QtGui.QVBoxLayout()
        txt = QtGui.QTextEdit(self)
        MySoc(txt)

        lay.addWidget(txt)
        self.setLayout(lay)
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    wid = MainWid()
    sys.exit(app.exec_())

if __name__=="__main__":
    main()

【问题讨论】:

几点说明:说明您遇到的实际问题总是好的 - 而不是“代码不起作用”,更好地解释您的期望以及代码的行为方式有何不同。我假设您看不到传递到您的插槽的信号,请参阅下面的答案。我还调整了标签——看起来你所说的“socket”在Qt中真的被称为“slot”。 socket 是不同的东西。完整且可运行的示例代码 +1 - 这使得分析变得非常容易! @Andreas 感谢您的评论、回答和调整;) 【参考方案1】:

initgui 中的 MySoc 对象具有本地范围,因此在 initgui 结束时被销毁。

将对象赋值给一个变量:

...
self.soc = MySoc(txt);
...

每次按键都会看到“得到信号”输出。

【讨论】:

以上是关于PySide (Qt) 信号未到达我的插槽的主要内容,如果未能解决你的问题,请参考以下文章

使用 Qt Designer 在 PySide2 中实现信号/插槽时出错

将 QML 信号连接到 PySide2 插槽

qt 继承的信号不会到达插槽

在 moveToThread() 之后未调用 Qt 4.8 信号/插槽

使用 PySide2 将 python 信号连接到 QML ui 插槽

Maya PySide:当我尝试将自定义信号连接到插槽时,Maya 崩溃