Klar QLineEdit Ereignis klicken
Ich bin sehr neu in Python und dem Qt Designer. Mit diesem code möchte ich dem Benutzer die Eingabe von text in das QLineEdit-widget, drücken Sie die Kopieren! Schaltfläche und sehen Sie den eingegebenen text ersetzen Sie die "N/A" - label. Meine Frage ist: nach diesem Verfahren, wie lösche ich den text eingegeben in die QLineEdit-widget mit einem einfachen Mausklick?
Aus, was ich lese (diese, diese und diese) wie es scheint, ich brauche zu implementieren focusInEvent() in eine neue Klasse, die sich QLineEdit. Mein problem ist, dass der code für meine GUI importiert wurde vom Qt-Designer mit pyuic5 und die oben angeführten Beispiele scheinen nicht zu nehmen diese in Betracht.
Hier ist mein code:
from PyQt5.QtWidgets import *
import sys
import QLineEdit_test
class MainWindow(QMainWindow, QLineEdit_test.Ui_QLineEdit_test):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.copy_button.clicked.connect(self.copy_and_print)
def copy_and_print(self):
self.label.setText(self.lineEdit.text())
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
app.exec_()
if __name__ == "__main__":
main()
Hier ist meine konvertierten .ui-Datei:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_QLineEdit_test(object):
def setupUi(self, QLineEdit_test):
QLineEdit_test.setObjectName("QLineEdit_test")
QLineEdit_test.resize(300, 200)
QLineEdit_test.setMaximumSize(QtCore.QSize(300, 200))
self.centralwidget = QtWidgets.QWidget(QLineEdit_test)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_2.setObjectName("gridLayout_2")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setMaximumSize(QtCore.QSize(120, 16777215))
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 0, 0, 1, 1)
self.copy_button = QtWidgets.QPushButton(self.centralwidget)
self.copy_button.setObjectName("copy_button")
self.gridLayout.addWidget(self.copy_button, 1, 0, 1, 1)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setMaximumSize(QtCore.QSize(200, 20))
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 2, 0, 1, 1)
self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
QLineEdit_test.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(QLineEdit_test)
self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 22))
self.menubar.setObjectName("menubar")
QLineEdit_test.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(QLineEdit_test)
self.statusbar.setObjectName("statusbar")
QLineEdit_test.setStatusBar(self.statusbar)
self.retranslateUi(QLineEdit_test)
QtCore.QMetaObject.connectSlotsByName(QLineEdit_test)
def retranslateUi(self, QLineEdit_test):
_translate = QtCore.QCoreApplication.translate
QLineEdit_test.setWindowTitle(_translate("QLineEdit_test", "MainWindow"))
self.copy_button.setText(_translate("QLineEdit_test", "Copy!"))
self.copy_button.setShortcut(_translate("QLineEdit_test", "Return"))
self.label.setText(_translate("QLineEdit_test", "N/A"))
Danke !
Die Anwendung an der ich arbeite nutzt die QLineEdit Feldern ein bisschen anders dann den Beispiel-code. Nachdem der Benutzer einen ticker code, der eingegeben text wird geändert, um zu zeigen, der volle name des Unternehmens im Zusammenhang mit der ticker-code vom Benutzer eingegeben (als Referenz und Bestätigung). Die enter-Verknüpfung umgesetzt wurde, in meinem Beispiel.
Ich verstehe immer noch nicht, warum Sie die zusätzliche Maus-klicken Sie. Warum nicht einfach die reset-line-edit-in der
copy_and_print
slot? Und was ist, wenn der Nutzer will, um die Maus verwenden, bewegen Sie den Cursor in die Zeile Bearbeiten? Es wäre ziemlich ärgerlich, wenn das deaktiviert den aktuellen text.Wie gesagt, die eingegebenen ticker-code in das QLineEdit Feld wird ersetzt durch den vollständigen Namen des Unternehmens ein. Ich möchte diese Informationen bleiben sichtbar als Referenz, bis der Benutzer entscheidet, um einen neuen ticker-code. Wenn ich klar die QLineEdit in der copy_and_print(), es wird verschwinden, nachdem der Benutzer auf die Schaltfläche klickt. Es sei denn, ich falsch, was du sagst...
InformationsquelleAutor adam | 2017-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung ist die Förderung der QtDesigner mit unserem benutzerdefinierten QLineEdit, wo setzen wir das signal clicked mit Hilfe von mousePressEvent, diese Klasse wird aufgerufen, ClickableLineEdit und die Datei wird aufgerufen ClickableLineEdit.py.
ClickableLineEdit.py
Zu fördern, die folgende Struktur berücksichtigt werden:
Öffnen Sie das design mit dem Qt Designer und der rechten Maustaste auf das QLineEdit und wählen Sie
Promote to ...
:Ein Menü wird sich öffnen, und legen Sie die folgenden
drücken und zu Fördern. Dann generieren wir den code erneut ein.
Dann verbinden wir das signal klar:
Update:
PySide2:
Tut mir Leid, dass. Ich werde auf Sie zurück kommen, sobald ich versuchte Ihre Lösung. Danke.
Das ist genau das, was ich suchte, danke!
InformationsquelleAutor eyllanesc