自连接()与QMainWindow.connect()

2024-10-01 15:29:29 发布

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

作为一个新手与pyQT4SIGNALSLOT一起玩,我意识到在所有简单的例子中,<class>.connect(...)和{}之间实际上没有区别,这意味着两者都能做我想要的。 最简单的情况是连接一个QWindow的按钮,就像问题的标题一样。在

有什么区别吗?有人能给我解释一下吗?在


Tags: 标题connect情况按钮class例子slot意识
2条回答

您所引用的connect方法是acutally^{},这是一个静态方法。因此,对QObject的实例或子类或直接对QObject调用它并不重要。在

也就是说,不要用它。在

最好使用信号的连接方法:

qobject_instance.signal_name.connect(slot_or_callable)

这被称为"new style signals",是PyQt4中连接信号的首选方式。
在PyQt5中,旧的信号甚至完全消失了,这意味着QObject.connect不再存在,您必须使用新的信号。在

应避免使用信号和插槽。尽管PyQt4中仍然支持这种类型的连接信号,但PyQt5中根本不支持它。在

相反,您应该尽可能使用new-style syntax。与旧样式的语法相比,新样式的语法更易读,更不容易出错。在

为了说明区别,考虑一下QTreeWidget signal

void QTreeWidget::currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous ) [signal]

使用旧式语法,在PyQ4中可以将其翻译为:

    self.connect(self.treewidget, QtCore.SIGNAL(
        'currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)'),
        self.handleCurrentChanged)

但是使用新的语法,它可以是:

^{2}$

这一点立即变得简单明了,并使我们清楚地看到什么与什么以及如何联系在一起。在

更好的是,它更不容易出错。如果一个新的连接出错,它总是会引发一个错误。在旧的语法中,如果SIGNAL的字符串参数稍有错误,连接将自动失败,使调试变得非常困难。在

附言:

如果使用pyuic4将设计器ui文件转换为python模块,则生成的代码将使用旧样式的语法。这是不幸的,但显然是由于向后兼容的原因而不得不这样做的。这并不意味着这是在手工编写的PyQt代码中进行操作的“正确”方法。在

相关问题 更多 >

    热门问题