PyQt5 从其他程序中获取选中的文本内容

PyQt5 Get the selected text content from other programs

我正在看 PyQt4 中的这个例子。

Get the selected text

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

等效代码为:

   QApplication.clipboard().dataChanged.connect(listener.changedSlot)

这是new-style signal and slot syntax, which has completely replaced the old-style syntax。旧式语法容易出错、冗长且不符合 Python 风格——特别是,如果信号签名错误,它不会引发错误。 PyQt4 仍然支持这两种语法,但 PyQt5 根本不支持(而且永远不会)。