При выборе в QComboBox крашится приложение | Python, PyQt5
Код на Python, с использованием библиотеки PyQt5.
Хочу сделать функцию, при которой, отталкиваясь от выбора пользователя и его суточного расхода калорий выводятся советы.
Суточный расход калорий вводится в lineEdit
В comboBox четыре варианта выбора: Ничего не хочу; Хочу похудеть; Хочу улучшить фигуру; Хочу набрать мыш. массу.
Если пользователь ввёл верный суточный расход калорий (давайте сократим - СРК) и выбрал "Хочу похудеть" в label выводится совет - "Чтобы похудеть, надо понизить свой СРК до (СРК - 500) ккал; Если пользователь выбрал "Хочу улучшить фигуру" - "Чтобы улучшить фигуру, нужно больше тренироваться при том же СРК"; Если пользователь выбрал "Хочу набрать мыш. массу - "Чтобы набрать мышечную массу нужно повысить СРК до (СРК + 400) ккал".
Если пользователь выбрал "Ничего не хочу" ничего выводить не надо.
Если пользователь не ввёл какие-то данные или СРК > 14241 или СРК < 417 ничего выводить не нужно.
Начал писать код, вроде всё правильно, но при выборе пункта "Хочу похудеть" приложение крашится. Помогите решить проблему.
main.py
import re
import sys
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow
from first_project.project.design_project import Ui_MainWindow
MIN_EXP = 417
MAX_EXP = 14241
class WayToTheDream(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# настройки окна
self.setWindowTitle('Way To The Dream!')
self.setFixedSize(1010, 763)
self.label.setText('Введите сут. расход ккал (округлите)')
self.comboBox.addItem('Ничего не хочу')
self.comboBox.addItem('Хочу похудеть')
self.comboBox.addItem('Хочу улучшить фигуру')
self.comboBox.addItem('Хочу набрать мыш. массу')
self.comboBox.activated.connect(self.expenditure_advice)
def checking_condition_exp(self):
if MAX_EXP >= int(''.join(list(map(str, re.findall(r'\d+', self.lineEdit.text()))))) >= MIN_EXP:
return int(''.join(list(map(str, re.findall(r'\d+', self.lineEdit.text())))))
def expenditure_advice(self):
if self.comboBox.currentText() == 'Хочу похудеть':
self.label.setText('Чтобы похудеть нужно понизить свой суточный расход калорий до ', self.checking_condition_exp() - 500, ' ккал')
else:
self.label.setText('')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = WayToTheDream()
ex.show()
sys.exit(app.exec_())
design_project.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1010, 763)
MainWindow.setStyleSheet("background-color: #F0F0F0;")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(180, 510, 201, 16))
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(180, 540, 201, 20))
self.lineEdit.setObjectName("lineEdit")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(180, 620, 201, 22))
self.comboBox.setObjectName("comboBox")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1010, 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.label.setText(_translate("MainWindow", "Введите суточный расход калорий:"))
self.label_3.setText(_translate("MainWindow", "Выберите цель:"))
self.label_4.setText(_translate("MainWindow", "Получите советы короче"))
self.label_5.setText(_translate("MainWindow", "Советы короче"))
Ответы (1 шт):
Попробуйте так:
import re
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow
#from first_project.project.design_project import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1010, 763)
MainWindow.setStyleSheet("background-color: #F0F0F0;")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(180, 510, 201, 40)) # (180, 510, 201, 16)
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(180, 550, 201, 20)) # (180, 540, 201, 20)
self.lineEdit.setObjectName("lineEdit")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(180, 620, 201, 22))
self.comboBox.setObjectName("comboBox")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1010, 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.label.setText(_translate("MainWindow", "Введите суточный расход калорий:"))
#? self.label_3.setText(_translate("MainWindow", "Выберите цель:"))
#? self.label_4.setText(_translate("MainWindow", "Получите советы короче"))
#? self.label_5.setText(_translate("MainWindow", "Советы короче"))
MIN_EXP = 417
MAX_EXP = 14241
class WayToTheDream(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# настройки окна
self.setWindowTitle('Way To The Dream!')
self.setFixedSize(1010, 763)
self.label.setText('Введите сут. расход ккал (округлите)')
self.comboBox.addItem('Ничего не хочу')
self.comboBox.addItem('Хочу похудеть')
self.comboBox.addItem('Хочу улучшить фигуру')
self.comboBox.addItem('Хочу набрать мыш. массу')
self.comboBox.activated.connect(self.expenditure_advice)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def checking_condition_exp(self):
find_d = re.findall(r'\d+', self.lineEdit.text())
if find_d:
if MAX_EXP >= int(''.join(list(map(str, find_d)))) >= MIN_EXP:
return int(''.join(list(map(str, find_d))))
# return int(''.join(list(map(str, re.findall(r'\d+', self.lineEdit.text())))))
return False
def expenditure_advice(self):
if self.comboBox.currentText() == 'Хочу похудеть':
_condition_exp = self.checking_condition_exp()
if _condition_exp:
_condition_exp = _condition_exp - 500
self.label.setText(
f'Чтобы похудеть нужно понизить свой суточный расход калорий до '
f'{_condition_exp} ккал'
)
self.label.setWordWrap(True)
else:
self.label.setText('')
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = WayToTheDream()
ex.show()
sys.exit(app.exec_())
