python - 如何在 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)
解决方案
在上一个链接的问题中,您使用具有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_())
推荐阅读
- ios - Xcode 10 升级:openssl.framework/openssl 上的 dyld 库错误
- javascript - 状态在本机反应中没有更新?
- xml - 如何自动生成订单 XML - Magento 2
- swift - 在 Swift 中遇到条件问题
- r - ggmap 地理编码在本地工作,但不能在 Shiny 服务器上工作
- java - 暂停扫描仪用户输入
- spring - 将客户端证书添加到 Spring Boot 应用程序
- java - 如何将字符串拆分为字符串
- c# - c#为文件创建唯一标识符
- racket - 如何为 Racket 中工作的符号微分函数修复幂规则的简化函数(以使结果更易于阅读)?