2016-11-29 9 views
0

私はこの例をPyQt4から見ていました。シグナルとスロットがPyQt5に変更しかしPyQt5他のプログラムから選択したテキストコンテンツを取得

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() 

Get the selected text、信号及びスロットが減価償却されます。 PyQt4の信号線とSLOT線を変換するための提案。 PyQt5

答えて

1

同等のコードに

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

である:

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

これは完全old-style syntaxを置き換えたnew-style signal and slot syntax、です。古いスタイルの構文はエラーが発生しやすく、冗長であり、pythonicではありません。特に、シグネチャのシグネチャが間違っていればエラーは発生しません。 PyQt4はまだ両方の構文をサポートしていますが、PyQt5はそれをまったくサポートしていません。

+0

答えが正しいことをありがとう、私たちはなぜdatachanged経由で接続する必要がありますか、PyQt4のようなQObjectではありません。 –

+0

@StormShadow。私は私の答えにいくつかの情報を追加しました。それを明確にするために – ekhumoro

+0

Thx。 –

関連する問題