Как добавить QLineEdit в QMessageBox PyQt5

Мне нужен копируемый текст в моем QMessageBox, поэтому я подумал, что могу поместить QLineEdit в QMessageBox, а затем установить текст QLineEdit, какой захочу, чтобы пользователь мог выбрать текст и скопировать его.

Но я не мог добиться успеха. Есть ли способ добавить QLineEdit в QMessageBox или сделать копируемый текст в QMessageBox?


person GLHF    schedule 12.05.2016    source источник


Ответы (1)


играя с QMessageBox.informativeText(), QMessageBox.detailedText() и QMessageBox.textInteractionFlags() я обнаружил следующее:

QMessageBox.informativeText() и QMessageBox.detailedText() доступны для выбора всегда, даже если QmessageBox.textInteractionFlags() установлено на QtCore.Qt.NoTextInteraction. QMessageBox.detailedText() отображается в текстовом редакторе. QMessageBox.setTextInteractionFlags() действует только на QmessageBox.text(). Использование этих типов текста описано в документации 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_())
person a_manthey_67    schedule 13.05.2016
comment
Если я скопирую и вставлю ваши коды в пустой скрипт, который работает, но когда я попытаюсь установить его в своем основном скрипте, я получу эту ошибку: msgbox.setTextInteractionFlags(QtCore.Qt.NoTextInteraction) AttributeError: 'NoneType' object has no attribute 'setTextInteractionFlags' Класс начинается с этого: class Example(QMainWindow): def __init__(self): super().__init__() - person GLHF; 14.05.2016
comment
Я работал над этим и исправил. Я просто помещаю текст с помощью метода setText. Спасибо за ваш ответ, я не знал, что есть такой метод, как setTtextInteraction() и т. д. Если вы можете дать больше информации о них в своем ответе, это будет полезно для будущих посетителей. - person GLHF; 14.05.2016