2016-05-12 28 views
0

Ich möchte einen kopierbaren Text auf meiner QMessageBox, also dachte ich, ich kann QLineEdit auf QMessageBox setzen und dann den Text von QLineEdit so einstellen, wie ich möchte, damit der Benutzer den Text auswählen und kopieren kann.So fügen Sie QLineEdit zu QMessageBox hinzu PyQt5

Aber ich konnte nicht erfolgreich sein. Gibt es eine Möglichkeit, QLineEdit zu QMessageBox hinzuzufügen oder einen kopierbaren Text auf QMessageBox zu erstellen?

Antwort

2

von mit QMessageBox.informativeText(), QMessageBox.detailedText() und QMessageBox.textInteractionFlags() spielen fand ich folgendes:

QMessageBox.informativeText() und QMessageBox.detailedText() immer wählbar sind, auch wenn QmessageBox.textInteractionFlags()-QtCore.Qt.NoTextInteraction eingestellt sind. QMessageBox.detailedText() wird in einem TextEdit angezeigt. QMessageBox.setTextInteractionFlags() wirkt nur auf QmessageBox.text(). Die Verwendung dieser Arten von Text ist in documentation of QMessageBox beschrieben. Mit Flags können Sie den Text editierbar und/oder wählbar einstellen, siehe enum TextInteractionFlags.

Hier ist ein funktionierendes Beispiel mit wählbarem Text in 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

Wenn ich kopieren Sie Ihre Codes in ein leeres Skript einfügen, das funktioniert, aber wenn ich es in meinem Haupt-Skript zu setzen versucht, bekomme ich diesen Fehler: ' msgbox.setTextInteractionFlags (QtCore.Qt.NoTextInteraction) Attribute: 'NoneType' Objekt hat kein Attribut ‚setTextInteractionFlags'' Klasse ist mit diesem Start:' Klasse Beispiel (QMainWindow): def __init __ (self): super(). __init __() ' – GLHF

+0

Ich habe daran gearbeitet und behoben. Ich habe den Text einfach mit der Methode setText geschrieben. Vielen Dank für Ihre Antwort. Ich wusste nicht, dass es eine Methode wie die setTtextInteraction() usw. gibt. Wenn Sie mehr Informationen über sie in Ihrer Antwort geben können, wird es für zukünftige Besucher gut sein. – GLHF