Je suis très nouveau sur Python et Qt Designer. En utilisant le code donné, je veux que l'utilisateur saisisse du texte dans le widget QLineEdit, appuyez sur Copier! bouton et voir le texte entré remplacer l'étiquette 'N/A'. Mes questions sont: suivant cette procédure, comment puis-je effacer le texte entré dans le widget QLineEdit avec un simple clic de souris?PyQt: Effacer QLineEdit sur l'événement click
D'après ce que je lis (this, this et this) il semble que je dois réimplémentez focusInEvent() dans une nouvelle classe extension QLineEdit. Mon problème est que le code de mon GUI a été importé de Qt Designer en utilisant pyuic5 et les exemples cités ci-dessus ne semblent pas en tenir compte.
Voici mon 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()
Voici mon fichier converti .ui:
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"))
Merci!
Pourquoi ne pas simplement effacer la ligne modifier automatiquement au lieu d'exiger un supplément un clic de souris? Aussi, ne serait-il pas plus agréable si l'utilisateur pouvait simplement appuyer sur Entrée pour copier le texte? – ekhumoro
@ekhumoro L'application sur laquelle je travaille utilise les champs QLineEdit un peu différemment de l'exemple donné. Après que l'utilisateur ait entré un code de téléscripteur, le texte entré est modifié pour afficher le nom complet de l'entreprise associé au code de téléscripteur entré par l'utilisateur (comme référence et confirmation). Le raccourci d'entrée a été implémenté dans mon exemple. – adam
Je ne comprends toujours pas pourquoi vous avez besoin d'un clic supplémentaire. Pourquoi ne pas simplement réinitialiser le line-edit dans le slot 'copy_and_print'? Et si l'utilisateur veut utiliser la souris pour déplacer le curseur dans le line-edit? Ce serait très agaçant si cela effaçait le texte actuel. – ekhumoro