Перейти к содержимому

Как связать qcombobox с qlineedit

  • автор:

Как принимать пользовательские данные из QLineEdit после нажатия клавиши enter?

Задача состоит в том, чтобы в поле QLineEdit принимать строку или число и сохранить ее в переменную после нажатия клавиши enter , искал в интернете, но там есть только ввод в консоль по нажатию кнопки, а мне необходимо , чтобы после enter данные записывались в переменную.

from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(639, 480) MainWindow.setMinimumSize(QtCore.QSize(639, 480)) MainWindow.setMaximumSize(QtCore.QSize(639, 480)) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.lets_parse = QtWidgets.QPushButton(self.centralwidget) self.lets_parse.setGeometry(QtCore.QRect(150, 350, 341, 61)) font = QtGui.QFont() font.setPointSize(14) self.lets_parse.setFont(font) self.lets_parse.setObjectName("lets_parse") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(20, 40, 101, 31)) font = QtGui.QFont() font.setPointSize(14) self.label.setFont(font) self.label.setObjectName("label") self.sort_method = QtWidgets.QComboBox(self.centralwidget) self.sort_method.setGeometry(QtCore.QRect(460, 80, 171, 21)) font = QtGui.QFont() font.setPointSize(11) self.sort_method.setFont(font) self.sort_method.setObjectName("sort_method") self.sort_method.addItem("") self.sort_method.addItem("") self.sort_method.addItem("") self.sort_method.addItem("") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(460, 40, 161, 31)) font = QtGui.QFont() font.setPointSize(14) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.url_input = QtWidgets.QLineEdit(self.centralwidget) self.url_input.setGeometry(QtCore.QRect(130, 49, 291, 21)) font = QtGui.QFont() font.setPointSize(11) self.url_input.setFont(font) self.url_input.setObjectName("url_input") self.max_pages = QtWidgets.QLabel(self.centralwidget) self.max_pages.setGeometry(QtCore.QRect(280, 160, 311, 61)) font = QtGui.QFont() font.setPointSize(11) self.max_pages.setFont(font) self.max_pages.setObjectName("max_pages") self.page_input = QtWidgets.QLineEdit(self.centralwidget) self.page_input.setGeometry(QtCore.QRect(180, 180, 41, 21)) self.page_input.setObjectName("page_input") self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(10, 170, 141, 41)) font = QtGui.QFont() font.setPointSize(11) self.label_3.setFont(font) self.label_3.setObjectName("label_3") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 639, 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) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.lets_parse.setText(_translate("MainWindow", "Cпарсить")) self.label.setText(_translate("MainWindow", "Url адресс:")) self.sort_method.setItemText(0, _translate("MainWindow", "без сортировки")) self.sort_method.setItemText(1, _translate("MainWindow", "дешевле")) self.sort_method.setItemText(2, _translate("MainWindow", "дороже")) self.sort_method.setItemText(3, _translate("MainWindow", "по дате")) self.label_2.setText(_translate("MainWindow", "Метод сортировки")) self.max_pages.setText(_translate("MainWindow", "Максимальное количество страниц : ")) self.label_3.setText(_translate("MainWindow", "Количесиво страниц")) def url_redactor(self): print(self.url_input.text()) 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_()) 

Отслеживать
73.6k 110 110 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаков
задан 4 ноя 2021 в 19:10
179 1 1 серебряный знак 11 11 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

НИКОГДА Не изменяйте код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

void QLineEdit:: editingFinished ()

Этот сигнал излучается при нажатии клавиши Return или Enter или при потере фокуса при редактировании строки.
Обратите внимание, что если в строке редактирования установлен validator() или inputMask() и нажата клавиша enter/return, сигнал editFinished() будет выдан только в том случае, если ввод следует за inputMask() и validator() возвращает QValidator::Acceptable .

void QLineEdit:: returnPressed ()

Этот сигнал излучается при нажатии клавиши Return или Enter .
Обратите внимание, что если в строке редактирования установлен validator() или inputMask() и нажата клавиша enter/return, сигнал editFinished() будет выдан только в том случае, если ввод следует за inputMask() и validator() возвращает QValidator::Acceptable .

import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.Qt import * class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(639, 480) MainWindow.setMinimumSize(QtCore.QSize(639, 480)) MainWindow.setMaximumSize(QtCore.QSize(639, 480)) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.lets_parse = QtWidgets.QPushButton(self.centralwidget) self.lets_parse.setGeometry(QtCore.QRect(150, 350, 341, 61)) font = QtGui.QFont() font.setPointSize(14) self.lets_parse.setFont(font) self.lets_parse.setObjectName("lets_parse") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(20, 40, 101, 31)) font = QtGui.QFont() font.setPointSize(14) self.label.setFont(font) self.label.setObjectName("label") self.sort_method = QtWidgets.QComboBox(self.centralwidget) self.sort_method.setGeometry(QtCore.QRect(460, 80, 171, 21)) font = QtGui.QFont() font.setPointSize(11) self.sort_method.setFont(font) self.sort_method.setObjectName("sort_method") self.sort_method.addItem("") self.sort_method.addItem("") self.sort_method.addItem("") self.sort_method.addItem("") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(460, 40, 161, 31)) font = QtGui.QFont() font.setPointSize(14) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.url_input = QtWidgets.QLineEdit(self.centralwidget) self.url_input.setGeometry(QtCore.QRect(130, 49, 291, 21)) font = QtGui.QFont() font.setPointSize(11) self.url_input.setFont(font) self.url_input.setObjectName("url_input") self.max_pages = QtWidgets.QLabel(self.centralwidget) self.max_pages.setGeometry(QtCore.QRect(280, 160, 311, 61)) font = QtGui.QFont() font.setPointSize(11) self.max_pages.setFont(font) self.max_pages.setObjectName("max_pages") self.page_input = QtWidgets.QLineEdit(self.centralwidget) self.page_input.setGeometry(QtCore.QRect(180, 180, 41, 21)) self.page_input.setObjectName("page_input") self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(10, 170, 141, 41)) font = QtGui.QFont() font.setPointSize(11) self.label_3.setFont(font) self.label_3.setObjectName("label_3") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 639, 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) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.lets_parse.setText(_translate("MainWindow", "Cпарсить")) self.label.setText(_translate("MainWindow", "Url адресс:")) self.sort_method.setItemText(0, _translate("MainWindow", "без сортировки")) self.sort_method.setItemText(1, _translate("MainWindow", "дешевле")) self.sort_method.setItemText(2, _translate("MainWindow", "дороже")) self.sort_method.setItemText(3, _translate("MainWindow", "по дате")) self.label_2.setText(_translate("MainWindow", "Метод сортировки")) self.max_pages.setText(_translate("MainWindow", "Максимальное количество страниц : ")) self.label_3.setText(_translate("MainWindow", "Количесиво страниц")) class Window(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) # . тут ваша логика vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv self.url_input.editingFinished.connect(self.url_redactor) # +++ # или так #self.url_input.returnPressed.connect(self.url_redactor) # +++ def url_redactor(self): print(self.url_input.text()) if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_()) 

Qt. Как использовать сигналы-слоты?

e885ad1b750c4cf784fdc1182a8725cf.png

Вот что получилось:

Теперь нужно сам алгоритм писать. Но как слоты-сигналы реализовать? Я понял, что через connect, но как не доходит.
Сделать бесконечный цикл? Как я понял, нужно при нажатии кнопки «ВЫЧИСЛИТЬ», подать сигнал в 3 слота: в 2 ComboBox’а и в редактируемый LineEdit. Тогда я получу строку из LineEdit, переведу ее в число, и потом if-else-if’ами вычислю и во второй LineEdit выведу после преобразования в строку.

  • Вопрос задан более трёх лет назад
  • 1705 просмотров

Комментировать
Решения вопроса 2
Программист на «си с крестами» и не только

Нет, мы заводим где-то новый слот и подаём сигнал в него.
Есть два способа завести новый слот: либо унаследоваться от QObject или его наследника (удобно унаследовать главную форму), либо воспользоваться лямбда-функцией C++11. Поскольку все наши формы на стеке, проще всего написать лямбду.

connect(&Button, &QPushButton::clicked, &Base, [&]() < // тут код >);

В реальных проектах каждая форма является наследником от QWidget (или чего-то подобного) и хранит свои компоненты. А слоты — это функции в форме.

Ответ написан более трёх лет назад
Нравится 1 7 комментариев

EgoRusMarch

megorit @EgoRusMarch Автор вопроса

Делать производные классы я пока не готов, у меня мозги перегреются)
Можно ведь базовыми сигналами-слотами обойтись:
От QComboBox нужны currentIndex и activated
От QLineEdit нужны text и setText
От QPushButon нужен pressed
От QString нужны setNum и toDouble
Только как сделать не могу разобраться:
* нужно ли для этого делать цикл бесконечный
* как соединить эти элементы сигналами-слотами

Цикл бесконечный делать не надо. Он уже есть где-то в коде QApplication.
Вот перед нами один слот, который и будет выполнять нашу задачу.
Штатными не обойдёшься — ибо это не просто соединить проводом нажатие OK и QDialog::accept(), а собственная логика.

How To connect QComboBox with QlineEdit in PyQt5

I’m developing a PyQt5 desktop GUI app, but am try to connect my comboBox such that, changing the variable in the combobox changes the values in the QlineEdit, please any help will be appreciated. Thanks I have tried several codes but it seems their syntax was not corresponding. below is my code.

from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def event(self): # get value of the selected combobox data V = float(self.input1.text()) U = float(self.input2.text()) t = float(self.input3.text()) a = float(self.input4.text()) #conditions #if u,t,a are given, use this formulars V = U + a*t S = U*t + (a*t**2)/2 t = (V - U)/a #if u,a,s are given, V =(U**2 + 2*a*S)**0.5 S = (V**2 - U**2)/2*a #set the selected combobox result self.lineEdit_result.setText def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(347, 219) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.comboBox = QtWidgets.QComboBox(self.centralwidget) self.comboBox.setGeometry(QtCore.QRect(20, 40, 31, 22)) self.comboBox.setObjectName("comboBox") self.comboBox.addItem("") self.comboBox.addItem("") self.comboBox.addItem("") self.comboBox.addItem("") self.comboBox.addItem("") self.input1 = QtWidgets.QLineEdit(self.centralwidget) self.input1.setGeometry(QtCore.QRect(60, 40, 113, 20)) self.input1.setObjectName("input1") self.comboBox_1 = QtWidgets.QComboBox(self.centralwidget) self.comboBox_1.setGeometry(QtCore.QRect(20, 70, 31, 22)) self.comboBox_1.setObjectName("comboBox_1") self.comboBox_1.addItem("") self.comboBox_1.addItem("") self.comboBox_1.addItem("") self.comboBox_1.addItem("") self.comboBox_1.addItem("") self.input2 = QtWidgets.QLineEdit(self.centralwidget) self.input2.setGeometry(QtCore.QRect(60, 70, 113, 20)) self.input2.setObjectName("input2") self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget) self.comboBox_2.setGeometry(QtCore.QRect(20, 100, 31, 22)) self.comboBox_2.setObjectName("comboBox_2") self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.comboBox_2.addItem("") self.input3 = QtWidgets.QLineEdit(self.centralwidget) self.input3.setGeometry(QtCore.QRect(60, 100, 113, 20)) self.input3.setObjectName("input3") self.comboBox_3 = QtWidgets.QComboBox(self.centralwidget) self.comboBox_3.setGeometry(QtCore.QRect(20, 130, 31, 22)) self.comboBox_3.setObjectName("comboBox_3") self.comboBox_3.addItem("") self.comboBox_3.addItem("") self.comboBox_3.addItem("") self.comboBox_3.addItem("") self.comboBox_3.addItem("") self.input4 = QtWidgets.QLineEdit(self.centralwidget) self.input4.setGeometry(QtCore.QRect(60, 130, 113, 20)) self.input4.setObjectName("input4") self.comboBox_ANS = QtWidgets.QComboBox(self.centralwidget) self.comboBox_ANS.setGeometry(QtCore.QRect(20, 190, 31, 22)) self.comboBox_ANS.setObjectName("comboBox_ANS") self.comboBox_ANS.addItem("") self.comboBox_ANS.addItem("") self.comboBox_ANS.addItem("") self.comboBox_ANS.addItem("") self.comboBox_ANS.addItem("") self.lineEdit_result = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_result.setGeometry(QtCore.QRect(60, 190, 113, 20)) self.lineEdit_result.setObjectName("lineEdit_result") self.calcbtn = QtWidgets.QPushButton(self.centralwidget) self.calcbtn.setGeometry(QtCore.QRect(110, 160, 75, 23)) self.calcbtn.setObjectName("calcbtn") ########################################################## self.calcbtn.clicked.connect(self.event) ######################################################### self.clrbtn = QtWidgets.QPushButton(self.centralwidget) self.clrbtn.setGeometry(QtCore.QRect(20, 160, 75, 23)) self.clrbtn.setObjectName("clrbtn") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(20, 10, 81, 16)) self.label.setObjectName("label") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) self.comboBox_1.setCurrentIndex(1) self.comboBox_2.setCurrentIndex(2) self.comboBox_3.setCurrentIndex(3) self.comboBox_ANS.setCurrentIndex(4) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Mechanics")) self.comboBox.setItemText(0, _translate("MainWindow", "V")) self.comboBox.setItemText(1, _translate("MainWindow", "U")) self.comboBox.setItemText(2, _translate("MainWindow", "a")) self.comboBox.setItemText(3, _translate("MainWindow", "t")) self.comboBox.setItemText(4, _translate("MainWindow", "S")) self.comboBox_1.setItemText(0, _translate("MainWindow", "V")) self.comboBox_1.setItemText(1, _translate("MainWindow", "U")) self.comboBox_1.setItemText(2, _translate("MainWindow", "a")) self.comboBox_1.setItemText(3, _translate("MainWindow", "t")) self.comboBox_1.setItemText(4, _translate("MainWindow", "S")) self.comboBox_2.setItemText(0, _translate("MainWindow", "V")) self.comboBox_2.setItemText(1, _translate("MainWindow", "U")) self.comboBox_2.setItemText(2, _translate("MainWindow", "a")) self.comboBox_2.setItemText(3, _translate("MainWindow", "t")) self.comboBox_2.setItemText(4, _translate("MainWindow", "S")) self.comboBox_3.setItemText(0, _translate("MainWindow", "V")) self.comboBox_3.setItemText(1, _translate("MainWindow", "U")) self.comboBox_3.setItemText(2, _translate("MainWindow", "a")) self.comboBox_3.setItemText(3, _translate("MainWindow", "t")) self.comboBox_3.setItemText(4, _translate("MainWindow", "S")) self.comboBox_ANS.setItemText(0, _translate("MainWindow", "V")) self.comboBox_ANS.setItemText(1, _translate("MainWindow", "U")) self.comboBox_ANS.setItemText(2, _translate("MainWindow", "a")) self.comboBox_ANS.setItemText(3, _translate("MainWindow", "t")) self.comboBox_ANS.setItemText(4, _translate("MainWindow", "S")) self.calcbtn.setText(_translate("MainWindow", "SOLVE")) self.clrbtn.setText(_translate("MainWindow", "CLEAR")) self.label.setText(_translate("MainWindow", "MECHANICS")) 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_()) 

QLineEdit with Custom QComboBox

Hi guys i am pretty new to Qt and now trying to make a simple dictionary application and i wanted to customize the QLineEdit with QComboBox inside like u get a search box with magnifier icon and down arrow right next to it and u can choose from the options right inside the QLineEdit. The idea seems easy to realize as i inherited QLineEdit and used a new QComboBox inside and i managed to get QComboBox inside the QLine edit with magnifier or any icons but the problem is the down arrow of QComboBox cant be set closer to the icons like almost overlaps little bit from left small down arrow i tries different styleSheet stuffs but still the distance between down arrow and the icon is not changed. Any suggestions will be appreciated..

goetz отредактировано

I don’t know exactly what you want, but could a editable QComboBox be a solution for you? Another guess might be to use the input widget in the locator of Qt Creator. I don’t know if it is available as a more or less standalone widget.

mohsen отредактировано

@Volker: I guess he needs an autofill textbox. you could use same combobox and make it appear like textbox using style http://developer.qt.nokia.com/forums/viewthread/3150 then you can design a combo box with your theme by placing a button to expand combo box where ever you want.

bahonurn отредактировано

thanks for the replies but the thing is i want like a input box with icon and down arrow before the input itself where one can click the arrow next to the icon and choose different options to search like hmm english or other alternative languages

giesbert отредактировано
Can you show us a picture, of what you want to achieve? that would make it clearer.

Nokia Certified Qt Specialist.
Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

bahonurn отредактировано

Here i am attaching the link where it shows a simple iTunes search box. As u see it has magnifier glass with drop down options to search. So that is almost what i want to do if that is realizable in Qt. Thanks Guys :)!http://lifehacker.com/246006/add-search-keyboard-shortcut-to-itunes-on-your-mac()!

goetz отредактировано

This is what Qt Creator uses in its locator on the bottom. Maybe it’s not too hard to extract it from its sources.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *