我想在我的QMessageBox上有一个可复制的文本,所以我想我可以在QMessageBox上放置一个QLineEdit,然后根据需要设置QLineEdit的文本,这样用户就可以选择文本并复制它。
但我无法成功。有没有办法将QLineEdit添加到QMessageBox或在QMessageBox上创建可复制的文本?
答案 0 :(得分:2)
通过与QMessageBox.informativeText()
,QMessageBox.detailedText()
和QMessageBox.textInteractionFlags()
一起玩,我发现了以下内容:
QMessageBox.informativeText()
和QMessageBox.detailedText()
始终可以选择,即使QmessageBox.textInteractionFlags()
设置为QtCore.Qt.NoTextInteraction
也是如此。 QMessageBox.detailedText()
显示在短信中。 QMessageBox.setTextInteractionFlags()
仅对QmessageBox.text()
采取行动。 documentation of QMessageBox描述了这些文本的使用。通过标记,您可以将文本设置为可编辑和/或可选择,请参阅enum TextInteractionFlags。
这是一个包含QmessageBox.detailedText()
中可选文字的工作示例:
import sys
from PyQt5 import QtWidgets, QtCore
class MyWidget(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setGeometry(400,50,200,200)
self.pushButton = QtWidgets.QPushButton('show messagebox', self)
self.pushButton.setGeometry(25, 90, 150, 25)
self.pushButton.clicked.connect(self.onClick)
def onClick(self):
msgbox = QtWidgets.QMessageBox()
msgbox.setText('to select click "show details"')
msgbox.setTextInteractionFlags(QtCore.Qt.NoTextInteraction) # (QtCore.Qt.TextSelectableByMouse)
msgbox.setDetailedText('line 1\nline 2\nline 3')
msgbox.exec()
app = QtWidgets.QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())