PyQt信号连接但未调用方法..(PyQt4.8,Python 3.2)

0 投票
1 回答
915 浏览
提问于 2025-04-16 15:53

大家好,我知道这个问题说得不够清楚(我找不到一句话能解释清楚问题)。我正在做一个项目,里面有一个集中管理的图形界面(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快速图形编程》这本书里找,但没有找到解决这个具体问题的方法。

非常感谢任何帮助,提前谢谢大家..

1 个回答

1

确实,我觉得这个问题太模糊了。如果没有一个具体的、简单的代码示例来展示你遇到的问题,我们很难帮到你。

不过,我想提一下你写的一个让我担忧的地方:

为了保持数据交换,每个对象 都包含了主类的对象

这几乎肯定是个坏主意,正是为了避免这种情况,Qt的信号和槽机制才被设计出来。你让所有的对象都知道某个“主”对象,这样的设计简直就是个灾难,随时可能出问题。为什么不通过信号和槽来交换数据,而非增加这种额外的组合呢?

这可能听起来有点跑题,但我发现过于复杂的设计往往会导致一些微妙的编程错误,这些错误在设计没有理清之前很难解释和调试。

撰写回答