2016-11-29 95 views
0

我正在从PyQt4看这个例子。PyQt5从其他程序获取所选文本内容

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和信号和SLOT折旧。 任何改变PyQt4 SIGNAL和SLOT线的建议。

QObject.connect(QApplication.clipboard(), SIGNAL(
    "dataChanged()"), listener, SLOT("changedSlot()")) 

到PyQt5

回答

1

等效代码是:

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

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

+0

谢谢你的回答是正确的,你能否详细说明为什么我们必须通过datachanged而不是像PyQt4中的QObject连接。 –

+0

@StormShadow。我在我的答案中增加了一些更多信息。 – ekhumoro

+0

Thx为澄清它。 –