PyQt5 вывести информацию из поля ввода нажатием кнопки Enter
Есть программа, написанная на модуле PyQt5. Нужно, чтобы после ввода в поле, действие выполнялось нажатием на кнопку Enter.
Найденную в гугле инфу по теме добавила в код, но не работает. Спасибо заранее за помощь начинающим.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(240, 180)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName('<Enter> or click')
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(5, 20, 230, 20))
self.lineEdit.setText("")
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(80, 60, 75, 23))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 120, 181, 20))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.pushButton.clicked.connect(self.myFunction)
self.pushButton = QtWidgets.QPushButton('Enter')
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Окно"))
self.pushButton.setText(_translate("MainWindow", "Кнопка"))
self.label.setText(_translate("MainWindow", "Длина Вашего текста"))
def myFunction(self):
self.label.setText("Длина Вашего текста %d" % len(self.lineEdit.text()))
def sync_lcd(self, MainWindow):
lcd.display(self.lineEdit())
self.pushButton.clicked.connect(sync_lcd)
self.pushButton.setAutoDefault(True)
self.lineEdit.returnPressed.connect(self.pushButton.click)
sync_lcd()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Не надо искать в гугле, полистайте поста данного сайта и вы много найдете интересного.
Вы не внимательно прочитали, что вам написал @gil9red
и дело тут не названии, а в том, что ее (т.е. этод метод sync_lcd) -нужно вызывать.
Предположительно потому, что в этом методе прописана (не правильно) строка:
lcd.display(self.lineEdit())
правильно будет так:
self.lcd.display(self.lineEdit.text())
но объект self.lcd должен быть создан заранее:
self.lcd = QtWidgets.QLCDNumber(self.centralwidget)
Также надо отметить, что в QLCDNumber могут быть показаны:
- цифры: 0/O, 1, 2, 3, 4, 5/S, 6, 7, 8, 9/g;
- минус, десятичная точка, двоеточие, знак степени (который указан в строке одинарной кавычкой), пробел,
- некоторые буквы A, B, C, D, E, F, h, H, L, o, P, r, u, U, Y;
QLCDNumber заменяет недопустимые символы - на пробел.
Для того чтобы вызвать на исполнение метод sync_lcd
вы должны соединить событие self.lineEdit сигналом returnPressed со слотом sync_lcd
self.lineEdit.returnPressed.connect(self.sync_lcd)
Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс,
который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
Пример, который вы нашли должен выглядеть примерно так:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(240, 240)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName('<Enter> or click')
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(5, 20, 230, 20))
self.lineEdit.setText("")
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(80, 60, 75, 23))
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 160, 181, 20))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# self.pushButton.clicked.connect(self.myFunction)
# self.pushButton = QtWidgets.QPushButton('Enter')
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Окно"))
self.pushButton.setText(_translate("MainWindow", "Кнопка"))
self.label.setText(_translate("MainWindow", "Длина Вашего текста"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.myFunction)
self.lineEdit.returnPressed.connect(self.sync_lcd) # sync_lcd !!!
self.lcd = QtWidgets.QLCDNumber(self.centralwidget)
self.lcd.setDigitCount(10)
self.lcd.setGeometry(QtCore.QRect(5, 90, 230, 50))
def myFunction(self):
self.label.setText("Длина Вашего текста %d" % len(self.lineEdit.text()))
def sync_lcd(self):
self.lcd.display(self.lineEdit.text())
# self.pushButton.clicked.connect(sync_lcd)
# self.pushButton.setAutoDefault(True)
# self.lineEdit.returnPressed.connect(self.pushButton.click)
# sync_lcd()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
