从QPlainTextEdit复制时,我希望获得没有样式信息的原始文本。当前,从QPlainTextEdit粘贴到excel时,包含样式信息。我用的是PySide2。你知道吗
下面是一张excel的图片来说明这个问题
我最初将A列的背景色设置为黄色,并粘贴在该列的顶部。你知道吗
我已经尝试重新实现createMimeDataFromSelection,但是如果我创建了一个新的qimedata,设置文本并返回它,程序就会崩溃,没有错误。经过进一步的测试,这个方法确实有效,并且在使用PyQt5而不是PySide2时不会崩溃。也许这是PySide2的错误。你知道吗
def createMimeDataFromSelection(self):
mime = QMimeData()
text = self.textCursor().selectedText()
mime.setText(text)
return mime #Crashes
如果我使用super()获取父级的QMimeData,并使用setText()和setHtml()覆盖文本,那么在复制时,我仍然会获得带有样式的原始文本:
def createMimeDataFromSelection(self):
mime = super().createMimeDataFromSelection()
mime.clear()
mime.setData("text/plain", b"")
mime.setText(self.textCursor().selectedText())
mime.setHtml("")
return mime #Copied string still contains styling information
下面是一个完整的示例,展示了标准的QPlainTextEdit,一个尝试替换父类提供的mime数据,另一个尝试创建自己的mime数据。你知道吗
import sys
from PySide2.QtWidgets import QWidget, QPlainTextEdit, QApplication, QVBoxLayout
from PySide2.QtCore import QMimeData
class TextEditRemoveMime1(QPlainTextEdit):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def createMimeDataFromSelection(self):
mime = super().createMimeDataFromSelection()
mime.clear()
mime.setData("text/plain", b"")
mime.setText(self.textCursor().selectedText())
mime.setHtml("")
return mime
class TextEditRemoveMime2(QPlainTextEdit):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def createMimeDataFromSelection(self):
mime = QMimeData()
text = self.textCursor().selectedText()
mime.setText(text)
return mime
class Example(QWidget):
def __init__(self):
super().__init__()
vbox = QVBoxLayout()
# Has styling information
plainTextEdit = QPlainTextEdit(self)
vbox.addWidget(plainTextEdit)
# Still has styling information
plainTextEdit = TextEditRemoveMime1(self)
vbox.addWidget(plainTextEdit)
# Crashes in PySide2, but does remove styling and does not crash in PyQt5
plainTextEdit = TextEditRemoveMime2(self)
vbox.addWidget(plainTextEdit)
self.setLayout(vbox)
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
目前没有回答
相关问题 更多 >
编程相关推荐