Python self.connect()与QMainWindow.connect()的比较
作为一名使用pyQT4Python self.connect()与QMainWindow.connect()的比较,python,pyqt4,Python,Pyqt4,作为一名使用pyQT4SIGNAL和SLOT的新手,我意识到在所有简单的情况下,.connect(…)和self.connect(…)之间实际上没有区别,这意味着两者都能满足我的需求。 最简单的情况是连接问题标题中的QWindow按钮 有什么不同吗?有人能给我解释一下吗?您所指的连接方法实际上是一种静态方法。因此,在QObject的实例或子类或直接在QObject上调用它实际上并不重要 也就是说,不要使用它 最好改用信号的连接方式: qobject_instance.signal_name.co
SIGNAL
和SLOT
的新手,我意识到在所有简单的情况下,.connect(…)
和self.connect(…)
之间实际上没有区别,这意味着两者都能满足我的需求。
最简单的情况是连接问题标题中的QWindow按钮
有什么不同吗?有人能给我解释一下吗?您所指的
连接方法实际上是一种静态方法。因此,在QObject的实例或子类或直接在QObject上调用它实际上并不重要
也就是说,不要使用它
最好改用信号的连接方式:
qobject_instance.signal_name.connect(slot_or_callable)
这称为,是PyQt4中连接信号的首选方式。
在PyQt5中,旧样式的信号甚至完全消失了,这意味着QObject.connect
不再存在,您必须使用新样式的信号。您所指的connect
方法实际上是一种静态方法。因此,在QObject的实例或子类或直接在QObject上调用它实际上并不重要
也就是说,不要使用它
最好改用信号的连接方式:
qobject_instance.signal_name.connect(slot_or_callable)
这称为,是PyQt4中连接信号的首选方式。
在PyQt5中,旧样式的信号甚至完全消失了,这意味着QObject.connect
不再存在,您必须使用新样式的信号。您所指的connect
方法实际上是一种静态方法。因此,在QObject的实例或子类或直接在QObject上调用它实际上并不重要
也就是说,不要使用它
最好改用信号的连接方式:
qobject_instance.signal_name.connect(slot_or_callable)
这称为,是PyQt4中连接信号的首选方式。
在PyQt5中,旧样式的信号甚至完全消失了,这意味着QObject.connect
不再存在,您必须使用新样式的信号。您所指的connect
方法实际上是一种静态方法。因此,在QObject的实例或子类或直接在QObject上调用它实际上并不重要
也就是说,不要使用它
最好改用信号的连接方式:
qobject_instance.signal_name.connect(slot_or_callable)
这称为,是PyQt4中连接信号的首选方式。
在PyQt5中,旧样式的信号甚至完全消失,这意味着QObject.connect
不再存在,您必须使用新样式的信号。应避免使用信号和插槽。虽然这种类型的连接信号在PyQt4中仍然受支持,但在PyQt5中根本不受支持
相反,您应该尽可能使用。与旧式语法相比,新型语法更具可读性,更不容易出错
为了说明差异,考虑如下:
void QTreeWidget::currentItemChanged(QTreeWidgetItem*current,
QTreeWidgetItem*上一个[信号]
使用旧式语法,在PyQ4中,它可以翻译为:
self.connect(self.treewidget, QtCore.SIGNAL(
'currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)'),
self.handleCurrentChanged)
但使用新型语法,它可能是:
self.treewidget.currentItemChanged.connect(self.handleCurrentChanged)
这一点立即变得更简单、更清晰,并使我们清楚地知道什么与什么以及如何联系
更妙的是,它更不容易出错。如果您的新型连接出错,它将始终引发错误。在旧式语法中,如果SIGNAL
的字符串参数稍有错误,连接将无声地失败,这使得调试非常困难
附言:
如果使用pyuic4
将设计器ui文件转换为python模块,则生成的代码将使用旧式语法。这是不幸的,但显然,出于向后兼容性的原因,必须这样做。这并不意味着这是手工编写PyQt代码的“正确”方式。应避免使用信号和插槽。虽然这种类型的连接信号在PyQt4中仍然受支持,但在PyQt5中根本不受支持
相反,您应该尽可能使用。与旧式语法相比,新型语法更具可读性,更不容易出错
为了说明差异,考虑如下:
void QTreeWidget::currentItemChanged(QTreeWidgetItem*current,
QTreeWidgetItem*上一个[信号]
使用旧式语法,在PyQ4中,它可以翻译为:
self.connect(self.treewidget, QtCore.SIGNAL(
'currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)'),
self.handleCurrentChanged)
但使用新型语法,它可能是:
self.treewidget.currentItemChanged.connect(self.handleCurrentChanged)
这一点立即变得更简单、更清晰,并使我们清楚地知道什么与什么以及如何联系
更妙的是,它更不容易出错。如果您的新型连接出错,它将始终引发错误。在旧式语法中,如果SIGNAL
的字符串参数稍有错误,连接将无声地失败,这使得调试非常困难
附言:
如果使用pyuic4
将设计器ui文件转换为python模块,则生成的代码将使用旧式语法。这是不幸的,但显然,出于向后兼容性的原因,必须这样做。这并不意味着这是手工编写PyQt代码的“正确”方式。应避免使用信号和插槽。虽然这种类型的连接信号在PyQt4中仍然受支持,但在PyQt5中根本不受支持
相反,您应该尽可能使用。与旧式语法相比,新型语法更具可读性,更不容易出错
为了说明差异,考虑如下:
void QTreeWidget::currentItemChanged(QTreeWidgetItem*current,
QTreeWidgetItem*上一个[信号]
使用旧式语法,在PyQ4中,它可以翻译为:
self.connect(self.treewidget, QtCore.SIGNAL(
'currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)'),
self.handleCurrentChanged)
但使用新型语法,它可能是:
self.treewidget.currentItemChanged.connect(self.handleCurrentChanged)
这会立即变得更加简单和清晰,并使连接的内容变得显而易见