如何在 QtextEdit 上重载粘贴

how can I oveload paste on a QtextEdit

我想在 QTextEdit 中粘贴具有特定字体大小的文本,例如。 14

我制作了一个用空白替换段落符号的应用程序 space,例如 PyQt QLineEdit and 'paste' event?

在 def __init__(self) 我代码:

self.textEdit.textChanged.connect(self.valueChanged)

然后

def valueChanged(self, text):
    if QtGui.QApplication.clipboard().text() == text:
        self.pasteEvent(text)

然后

def pasteEvent(self, text):
    text.toUpper()
TypeError: valueChanged() takes exactly 2 arguments (1 given)

在上一个链接问题中,您使用了具有 void QLineEdit::textChanged(const QString &text) signal that carries the text, but in the case of QTextEdit there is a signal with the same name void textChanged() 的 QLineEdit,但它不包含文本,因此这是错误的原因。这种情况的解决方案是使用对象而不是通过信号来获取文本。

def valueChanged(self):
    if QtGui.QApplication.clipboard().text() == self.textEdit.text():
        self.pasteEvent(text)

尽管如果您的目标是更改字体的大小,那么您之前的逻辑将不起作用,因为您是在粘贴文本后检测事件,如果您想在粘贴期间修改某些内容,则必须重写insertFromMimeData()方法:

from PyQt4 import QtCore, QtGui


class TextEdit(QtGui.QTextEdit):
    def insertFromMimeData(self, source):
        last_font = self.currentFont()

        new_font = QtGui.QFont(last_font)
        new_font.setPointSize(14)
        self.setCurrentFont(new_font)
        super(TextEdit, self).insertFromMimeData(source)
        self.setCurrentFont(last_font)


if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)

    w = TextEdit()
    w.show()
    sys.exit(app.exec_())