Задать вопрос

Как переменной присвоить значения введённые в QLineEdit?

Есть у меня окно, там есть QLineEdit. Я хочу чтобы по нажатию клавиши Enter, или кнопки под QLineEdit, значения из QLineEdit, например ‘56’, присваивались какой-то переменной. Далее с переменой происходили какие-то манипуляции, например ‘a = a+10’, и результат выводился в окно, выше QLineEdit.
Вот моё окно:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QWidget, QLabel,
    QLineEdit, QApplication)

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        qle = QLineEdit(self)
        qle.move(60, 100)
        self.lbl.move(60, 40)
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QLineEdit')
        self.show()
           
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


Я знаю что сигнал от кнопки Enter можно получить таким кодом
def keyPressEvent(self, e):
        if e.key() == Qt.Key_Enter:
                #Что здесь делать дальше я не знаю


Помогите, пожалуйста.
  • Вопрос задан
  • 5246 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
a = self.qle.text()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sergey6661313
#!/usr/bin/python3
# -*- coding: utf-8 -*-

# вообще достаточно просто преобразовывать текст в число и работать с ним:
def prostoe_preobrazovanie_texta_v_chislo(text):
    try:                    # а вдруг там не число, а хрен пойми что?
        chislo = int(text)  # собственно вот нужная нам строчка...
        return chislo
    except Exception:
        return False

# но иногда приходится выковыривать число из текста:
def slojnoe_raspoznovanie_chisla(text):
    try:                    # а вдруг там число всё же где то есть?
        import re
        chislo = int(re.findall('(\d+)', text)[0])  # магия!
        return chislo
    except Exception:
        return False

# ну и конечно обратное действие:
def preobrazovanie_chisla_v_text(i):
    return str(i)



# вообще для чисел был специально придуман QSpinBox и QDoubleSpinBox

# но отвечая на Ваш вопрос мы всё же сделаем и вариант с QLineEdit
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QApplication, QPushButton, QBoxLayout, QDoubleSpinBox)
from PyQt5.Qt import Qt

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QBoxLayout(QBoxLayout.Down, self)  # - это для компоновки

        self.qle = QLineEdit("", self)              # почему lbl в локальной видимости а qle нет?
        # self - тут очень важно иначе как вы будете обращятся к своему qle?

        self.qle.setPlaceholderText("Например: 56") #  - самая крутая killer фича...
        layout.addWidget(self.qle)                  #  - ну и отдаём его компоновщику...

        button = QPushButton("математика!")         #  - вы же хотели ещё и кнопку да?
        button.pressed.connect(self.my_super_puper_function)  # вот так соединяем нажатие с методом
        layout.addWidget(button)                    #  - уж попроще всяких button.move(60, 40)

        self.spinbox = QDoubleSpinBox()             #  - пример виджета который изначально под это заточен
        self.spinbox.setRange(0, 99999999)          # к сожелению по умолчанию там стоят жёсткие ограничения
        layout.addWidget(self.spinbox)

        self.lbl = QLabel("\n\n\n")                 #  - это ведь label - я угадал?
        layout.addWidget(self.lbl)

        self.setWindowTitle('Простой пример')
        self.show()

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Enter:
            self.my_super_puper_function()          # а что мешало прямо тут реализовывать математику?
                                                    # ну мы же ещё и кнопку хотим подключить на то же самое...

    def my_super_puper_function(self):              # та самя функция...
        # в большинстве случаев математика не работает потому что в qlineedit изначально распологаются не числа,
        # а текст. Ну и как вы к "абвгд" прибавите 10 ?
        # никак... сначало нам нужно убедится что там действительно число:
        i = self.proverki_na_chislo()               # вообщемто просто: я вынес всю магию в отдельный метод...
        # и этот метод возвращяет число именно числом а не текстом.

        if i:                                       # если там вообще число, тогда:
            self.matematika(i)                      #   математику в студию!


    def matematika(self, a):  #  я думаю в комментариях не нуждается...
        b = a * 7 * 1443      #  моя любимая математика: она утраивает двухзначное число :)

        # со spinbox-м просто:
        self.spinbox.setValue(b / 11111 * 12345 / 54321 * 5)  # будет работать, я гарантирую...

        # а вот для qlineedit тяжелее:
        b_text = preobrazovanie_chisla_v_text(b) # число нужно сначало сделать текстом.
        self.qle.setText(b_text)                 # и лишь потом выводить.


        #  ну и всякие смехуёчки..., куда же без них?
        if b < 10**10:
            self.lbl.setText("Конкретная математика - для реальныйх пацанов!")
        else:
            self.lbl.setText("ОЛОЛОЛО!!!!")


    # а этом вообщем то следовало бы остановится...
    # но мой qt вылетает без предупреждений если в lineEdit вписать хоть одну букву...
    # и тут меня понесло:
    def proverki_na_chislo(self):
        text = self.qle.text()
        if text != "":                                      # если наше поле не пустое
            i = prostoe_preobrazovanie_texta_v_chislo(text) #   пробуем простое преобразование
            if i:                                           #   ну и если удечно:
                return i                                    #       выходим из этой функции уже с числом.

            i = slojnoe_raspoznovanie_chisla(text)          #   а если так и не вышли то пробуем более сложное.
            if i:
                self.lbl.setText(text + " - разве это число?\n" + "тут конечно есть число: " + str(i) + "\nно я с ним ничего решать не буду!")
                return i

            self.lbl.setText("Пожалуйста не материтесь...") # в противном случае скорее всего число вообще не написано:
            return False
        else:
            self.lbl.setText("нужно вписать число!")
            return False

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())  # без этого ничего не запустится...


# как то-так... ну вы держитесь там. Всего вам доброго!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы