首页 > 解决方案 > 如何在 QtextEdit 上超载粘贴

问题描述

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

我制作了一个用空格替换段落符号的应用程序,例如在 PyQt QLineEdit 和“粘贴”事件中?

在定义__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)

标签: pythonpyqtpyqt4qtextedit

解决方案


在上一个链接的问题中,您使用具有void QLineEdit::textChanged(const QString &text)携带文本的信号的 QLineEdit,但在 QTextEdit 的情况下,有一个具有相同名称的信号void textChanged()但它不携带文本,因此这是错误的原因。这种情况的解决方案是使用对象而不是通过信号来获取文本。

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

推荐阅读