Answer the question
In order to leave comments, you need to log in
How to assign values entered in QLineEdit to a variable?
I have a window, there is a QLineEdit. I want that on pressing Enter key, or the button under QLineEdit, values from QLineEdit, for example '56', were appropriated to some variable. Further, some manipulations took place with the change, for example 'a = a+10', and the result was displayed in the window above QLineEdit.
Here is my window:
#!/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_())
def keyPressEvent(self, e):
if e.key() == Qt.Key_Enter:
#Что здесь делать дальше я не знаю
Answer the question
In order to leave comments, you need to log in
#!/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_()) # без этого ничего не запустится...
# как то-так... ну вы держитесь там. Всего вам доброго!
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question