#!/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:
#Что здесь делать дальше я не знаю
#!/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_()) # без этого ничего не запустится...
# как то-так... ну вы держитесь там. Всего вам доброго!