2016-11-29 3 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 амортизируется. Любое предложение по преобразованию линии СИГНАЛА и SLOT PyQt4.

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, а не QObject, как в PyQt4. –

+0

@StormShadow. Я добавил дополнительную информацию к моему ответу. – ekhumoro

+0

Thx для уточнения. –

Смежные вопросы