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

时间:2016-11-29 19:19:37

标签: pyqt5 qt-signals

我从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

1 个答案:

答案 0 :(得分:1)

等效代码为:

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

这是new-style signal and slot syntax,已完全取代old-style syntax。旧式语法容易出错,冗长,并且不是pythonic - 特别是,如果信号签名错误,它不会引发错误。 PyQt4仍支持这两种语法,但PyQt5根本不支持它(并且永远不会支持)。