【问题标题】:PyQt signals connect but do not invoke methods.. (PyQt4.8, Python 3.2)PyQt 信号连接但不调用方法.. (PyQt4.8, Python 3.2)
【发布时间】:2011-08-07 00:23:24
【问题描述】:

大家好,我知道这个问题不够清楚(找不到如何用一行来解释这个问题)。我正在做一个项目,我在一个主类中包含一个集中的 gui,项目的各种组件由其他类的组合对象组成(编码在单独的文件中)。为了继续交换数据,每个对象也包含主类的对象(编辑:将尝试 E.Bendersky 建议的方法)。这样各个组件的信号就分别连接起来了。

这是classA的构造函数中的连接代码;

QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.impAln)
QtCore.QObject.connect(self.ui.comboBox_2, QtCore.SIGNAL("currentIndexChanged(int)"), self.makeAlnTable)
QtCore.QObject.connect(self.ui.pushButton_2, QtCore.SIGNAL("clicked()"), self.reset)

classB的构造函数中的连接代码;

QtCore.QObject.connect(self.ui.comboBox_3, QtCore.SIGNAL("currentIndexChanged(int)"), self.enableLineEdits)
QtCore.QObject.connect(self.ui.comboBox_4, QtCore.SIGNAL("currentIndexChanged(int)"), self.enableLineEdits)
QtCore.QObject.connect(self.ui.comboBox_5, QtCore.SIGNAL("currentIndexChanged(int)"), self.enableLineEdits)
QtCore.QObject.connect(self.ui.pushButton_4, QtCore.SIGNAL("clicked()"), self.wrdMaker)
QtCore.QObject.connect(self.ui.pushButton_3, QtCore.SIGNAL("clicked()"), self.reset)

问题在于,当创建 classA 的实例时,连接和信号工作正常。但是当创建 classB 的实例时,相应的信号不起作用(按钮不会启动方法等;不会引发错误/异常)。我尝试在网上查找“使用 Python 和 Qt 进行快速 GUI 编程”,但没有一个能解决这个特定问题。

非常感谢任何帮助,在此先感谢..

【问题讨论】:

    标签: python python-3.x pyqt pyqt4 signals-slots


    【解决方案1】:

    确实,恕我直言,这个问题太模糊了。如果没有具体最小代码示例来演示问题将很难帮助您。

    我想谈谈你写的一件令人不安的事情:

    为了保持交换数据,每个对象 有主类的对象 也包括在其中

    这几乎可以肯定是一个坏主意,而 Qt 的信号和插槽正是为了解决这个问题而设计的,而不会产生这种耦合。你让你的所有对象都知道一些“主要”的中心对象——一场等待发生的设计灾难。为什么不用信号和槽交换数据,没有这个额外的组合呢?

    这听起来可能离题,但我经常发现过于复杂的设计会导致细微的编程错误,在解开设计之前很难解释和调试。

    【讨论】:

    • 感谢您的提示,我想我仍然坚持事件处理的心态.. 稍后将尝试您的信号建议以进行数据传输.. 现在,请检查我的编辑,并感谢您的回复.
    • 嘿,刚刚弄明白了,原来问题是在多继承模式中混合了事件循环,然后错过了正确的父调用(长话短说,算法很新颖,需要这样灾难)。仍然感谢您的帮助,如果您能指出有关使用信号进行数据交换的教程,我将不胜感激。再次感谢
    • @SHKT: 看起来像是复杂设计导致编程错误的经典案例 ;-) 至于与信号的数据交换 - 无需教程 - 您可以在对象中定义自定义插槽以接受任何参数你希望。信号,OTOH,可以发送你想要的任何参数。将相关信号与槽连接,即可传输数据。
    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 2013-07-14
    • 2018-12-31
    • 1970-01-01
    • 2016-01-23
    • 2016-11-03
    • 2011-05-08
    相关资源
    最近更新 更多