我从PyQt4看这个例子。
from PyQt4.QtCore import QObject, pyqtSlot, SIGNAL, SLOT
from PyQt4.QtGui import QApplication, QMessageBox
import sys
class MyClipboard(QObject):
@pyqtSlot()
def changedSlot(self):
if(QApplication.clipboard().mimeData().hasText()):
QMessageBox.information(None, "Text has been copied somewhere!",
QApplication.clipboard().text())
def main():
app = QApplication(sys.argv)
listener = MyClipboard()
app.setQuitOnLastWindowClosed(False)
QObject.connect(QApplication.clipboard(), SIGNAL(
"dataChanged()"), listener, SLOT("changedSlot()"))
sys.exit(app.exec_())
if __name__ == '__main__':
main()
然而,PyQt5中的信号和插槽发生了变化,而SIGNAL和SLOT也被折旧了。 任何改变PyQt4 SIGNAL和SLOT线的建议。
QObject.connect(QApplication.clipboard(), SIGNAL(
"dataChanged()"), listener, SLOT("changedSlot()"))
到PyQt5
答案 0 :(得分:1)
等效代码为:
QApplication.clipboard().dataChanged.connect(listener.changedSlot)
这是new-style signal and slot syntax,已完全取代old-style syntax。旧式语法容易出错,冗长,并且不是pythonic - 特别是,如果信号签名错误,它不会引发错误。 PyQt4仍支持这两种语法,但PyQt5根本不支持它(并且永远不会支持)。