Как получить текст из виджетов в PyQt5?

Вопрос такой, было ПО, решил расширить и добавить в него простой интерфейс. Для этого использовал PyQt5 + Qt Designer. Но не могу связать с переменными в коде значения, которые вводятся в виджете LineEdit, пример ниже.

Есть диалоговое окно, на нём пустые виджеты LineEdit для ввода данных и кнопка для запуска расчётов. Код для связи кнопки и кода:

from PyQt5 import uic, QtWidgets

Form, _ = uic.loadUiType("1.ui") 


class Ui(QtWidgets.QDialog, Form):
    def __init__(self):
        super(Ui, self).__init__() 
        self.setupUi(self) 
        self.pushButton.clicked.connect(self.ResultButtonPressed) 

    @staticmethod
    def ResultButtonPressed():
        a = input() 
        b = input() 
        c = input() 
        v = a + b - c
        print(v)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Ui() 
    w.show() 
    sys.exit(app.exec_())

Нужно присвоить значения, введённые в полях виджета LineEdit (lineEdit_1, lineEdit_2, lineEdit_3) переменным в функции (a, b, c) при нажатии кнопки. Как это сделать?


Ответы (1 шт):

Автор решения: Vestalt

Если каждый LineEdit в QtDesigner именуется именно так (lineEdit_1, lineEdit_2, lineEdit_3), то в коде методов класса, к которому подключён UI, к ним можно обратиться как self.lineEdit_1, self.lineEdit_2, self.lineEdit_3 соответственно.

Теперь можно пользоваться методами, указанными в документации. В данном случае нужен .text():

def ResultButtonPressed():
    a = int(self.lineEdit_1.text())
    b = int(self.lineEdit_2.text())
    c = int(self.lineEdit_3.text())
    print(a + b - c)

Примечание: по указанной ссылке содержится документация для Qt на языке C++, но все названия методов и их описания будут работать и для PyQt5.

→ Ссылка