2016-05-12 8 views
0

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

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

ответ

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

Если скопировать вставить коды в пустой скрипт, который работает, но когда я попытался установить его в моем основном сценарии я получаю эту ошибку: ' msgbox.setTextInteractionFlags (QtCore.Qt.NoTextInteraction) AttributeError: объект 'NoneType' не имеет атрибута «setTextInteractionFlags'' класс, начиная с этого: класс' Пример (QMainWindow): защиту __init __ (сам): супер(). __init __() ' – GLHF

+0

Я работал над этим и исправил. Я просто поместил текст с помощью метода setText. Спасибо за ваш ответ, я не знал, что существует такой метод, как setTtextInteraction() и т. Д. Если вы можете дать больше информации о них в своем ответе, это будет полезно для будущих посетителей. – GLHF