如何限制pyqt4剪贴板只打印文本或图像路径?

时间:2017-10-13 02:27:44

标签: python-2.7 pyqt4

  def tt(self):
    cb=QApplication.clipboard()
    data=cb.mimeData()
    #if data.hasImage():
            #for path in data.urls():
                #print path

    if data.hasText():
        tex =unicode (data.text())
        print tex
        if tex != "":
            r = QtCore.QStringList([])
            for ct in tex:
                py = slug(ct, style=pypinyin.TONE, errors='ignore')
                if py != '':
                    w = ct + '(' + py + ')'
                else:
                    w = ct
                r.append(w)
            str = r.join("")
        self.ui.textEdit.setText(QtCore.QString(str))

我使用python2.7和pyqt4为拼音制作汉字。因此,当我复制字符串时,它很好,工作很好。但是当我复制图像时,我只想打印它的路径。但tex仍然有效,slug()会出错。我如何限制它。

1 个答案:

答案 0 :(得分:0)

您可以使用QMimeData.hasUrls()QMimeData.urls()。后者返回QUrl个对象的列表(也用于文件路径):

if data.hasUrls() or data.hasImage():
    for url in data.urls():
        filepath = unicode(url.toLocalFile())
        print(filepath)
elif data.hasText():
    tex =unicode (data.text())
    ...

修改

以下是获取剪贴板信息的测试脚本:

import sys
from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.button = QtGui.QPushButton('Get Clipboard Info', self)
        self.button.clicked.connect(self.handleButton)
        self.edit = QtGui.QTextEdit(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.edit)
        layout.addWidget(self.button)

    def handleButton(self):
        cb = QtGui.QApplication.clipboard()
        data = cb.mimeData()
        output = []
        if data.hasImage():
            image = QtGui.QImage(data.imageData())
            output.append('Image: size %s' % image.byteCount())
        elif data.hasUrls():
            output.append('Urls: count %s' % len(data.urls()))
            for url in data.urls():
                filepath = unicode(url.toLocalFile())
                output.append('  %s' % filepath)
        elif data.hasText():
            output.append('Text: length %s' % len(data.text()))
        output.append('')
        output.append('Formats: count %s' % len(data.formats()))
        for fmt in data.formats():
            output.append('  %s' % fmt)
        self.edit.setText('\n'.join(output))

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 50, 300, 400)
    window.show()
    sys.exit(app.exec_())