Получение данных через QLineEdit и их вывод в QComboBox
Учусь работать с базами данных sqlite и подключать их к python приложению с использованием библиотеки PyQt5. Есть задача: Имеется QComboBox, в котором есть несколько вариантов выбора блюда (код комбобокса будет приведён ниже). Допустим пользователь выбрал вариант "Пицца", в одном QLabel выведет картинку с этим блюдом, в другом QLabel выведет состав блюда и его КБЖУ (Калории, белки, жиры и углеводы). <- ЭТА ЧАСТЬ КОДА СДЕЛАНА
Теперь то, зачем я задаю вопрос:
Нужно добавить QLineEdit (или несколько лайнэдитов), туда пользователь будет вводить название блюда, его состав и КБЖУ, а также загружать изображение только 211 пикселей на 151. После, надо, чтобы это блюдо добавлялось в QComboBox с блюдами и выводилось также, как и другие, добавленные через код. (в начале вопроса я написал про sqlite, так как, возможно, с его помощью, осуществить данную задачу будет проще)
Я не прошу написать всё это кодом ( хотя было-бы неплохо :) ), объясните мне, пожалуйста, как реализовать эту задачу
Учусь работать с базами данных sqlite и подключать их к python приложению с использованием библиотеки PyQt5.
Код QComboBox с выбором блюд и выводом картинки и состава с КБЖУ:
text_for_dishes_lib - функция с qlabel с информацией о библиотеке блюд (комбобокс с выводом блюда)
NazvanieBluda - qlabel с названием блюда
ComboViborBluda - combobox с вариантами выбора блюда
label_2 - qlabel, в котором выводится состав и КБЖУ выбранного блюда
photo - qlabel, в котором выводится картинка блюда
import sys
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow
from first_project.examples.design_example import Ui_MainWindow
class WayToTheDream(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# настройки окна
self.setWindowTitle('Way To The Dream!')
self.setFixedSize(1010, 546)
# запуск и условия для запуска | библиотека блюд
self.text_for_dishes_lib()
self.NazvanieBluda.setGeometry(QtCore.QRect(280, 350, 180, 21))
self.ComboViborBluda.activated.connect(self.dish_lib)
self.ComboViborBluda.activated.connect(self.set_image)
# при выборе блюда из комбобокса, текст лэйбла меняется на название блюда
self.ComboViborBluda.textActivated.connect(self.NazvanieBluda.setText)
# информация о библиотеке блюд
def text_for_dishes_lib(self):
self.TextBluda.setText(
"<html><head/><body><p>||Библиотека блюд.<br>||<br> ||Вы можете выбрать<br> ||блюдо из "
"выпадающего<br> ||списка и увидеть его<br> ||описание и "
"картинку!<br>\/</p></body></html>")
# логика библиотеки блюд
def dish_lib(self):
if self.ComboViborBluda.currentText() == 'Гамбургер':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Булочка, Говяжья котлета,<br>Кетчуп, Горчица,<br>Лук, Огурцы '
'маринованные<br>Приправа для гриля<br><br>КБЖУ - 257Ккал, 14г, 8,6г<br>29г.</p></body></head></html>')
elif self.ComboViborBluda.currentText() == 'Пицца':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Среднестатистическая <br>пицца:<br>Тесто, овощи, мясо,<br>Сыр, Соусы'
'<br><br>Среднее КБЖУ - <br>340Ккал на кусок пиццы,<br>10г, 14г, 30г.</p></body></head></html>')
elif self.ComboViborBluda.currentText() == 'Салат "Цезарь"':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Листовый салат, <br>Сыр "Пармезан",<br>Сухарики пшеничные, '
'<br>Соус "Цезарь"<br><br>КБЖУ - 375Ккал на порцию, 7,4г,<br>9г, 11г.</p></body></head></html>')
elif self.ComboViborBluda.currentText() == 'Салат "Греческий"':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Помидоры, Перец болг.<br>Огурцы, Лук, Брынза,<br>Маслины, Соус<br>'
'<br>КБЖУ - 877Ккал на порцию,<br>25г, 64г, 41г. </p></body></head></html>')
elif self.ComboViborBluda.currentText() == 'Картошка Фри':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Картошка.<br><br>КБЖУ - 274Ккал, 3,48г,<br>35,66г, 14,06г</p></body>'
'</head></html>')
elif self.ComboViborBluda.currentText() == 'Картошка по-деревенски (Айдахо)':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Картошка<br><br>КБЖУ - 331Ккал, 4.6г, <br>15г, 42г.</p></body></head>'
'</html>')
elif self.ComboViborBluda.currentText() == 'Наггетсы':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Котлеты куриные<br><br>КБЖУ - 440Ккал, 25г,<br>21г, 28г.</p></body>'
'</head></html>')
elif self.ComboViborBluda.currentText() == 'Крылышки':
self.label_2.setText(
'<html><head><body><p>Состав:<br>Куриные крылья, Специи<br><br>КБЖУ - 487Ккал на одно крыло,<br>28,4г,'
' 31,5г, 22,5г.</p></body></head></html>')
else:
self.label_2.clear()
# функция, которая ставит фото на место лэйбла, в зависимости от того, какое блюдо выбрал пользователь
def set_image(self):
burger = QPixmap("") # внутри кавычек указан путь к нужной картинке, я убрал, так как для поставленной задачи
pizza = QPixmap("") # это не нужно.
cezar = QPixmap("") # фотографии пользователья должны сохранятся в папку 'photos_for_project'
grec = QPixmap("") # размер фото - 211 пикселей на 151 пиксель
free = QPixmap("")
aydaho = QPixmap("")
naggetsy = QPixmap("")
wings = QPixmap("")
if self.ComboViborBluda.currentText() == 'Гамбургер':
self.photo.setPixmap(burger)
elif self.ComboViborBluda.currentText() == 'Пицца':
self.photo.setPixmap(pizza)
elif self.ComboViborBluda.currentText() == 'Салат "Цезарь"':
self.photo.setPixmap(cezar)
elif self.ComboViborBluda.currentText() == 'Салат "Греческий"':
self.photo.setPixmap(grec)
elif self.ComboViborBluda.currentText() == 'Картошка Фри':
self.photo.setPixmap(free)
elif self.ComboViborBluda.currentText() == 'Картошка по-деревенски (Айдахо)':
self.photo.setPixmap(aydaho)
elif self.ComboViborBluda.currentText() == 'Наггетсы':
self.photo.setPixmap(naggetsy)
elif self.ComboViborBluda.currentText() == 'Крылышки':
self.photo.setPixmap(wings)
else:
self.photo.clear()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = WayToTheDream()
ex.show()
sys.exit(app.exec_())
design_example (дизайн):
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1010, 546)
MainWindow.setStyleSheet("background-color: #F0F0F0;")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.ComboViborBluda = QtWidgets.QComboBox(self.centralwidget)
self.ComboViborBluda.setGeometry(QtCore.QRect(60, 310, 211, 22))
self.ComboViborBluda.setObjectName("ComboViborBluda")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ComboViborBluda.addItem("")
self.ViborBludaText = QtWidgets.QLabel(self.centralwidget)
self.ViborBludaText.setGeometry(QtCore.QRect(60, 290, 391, 16))
self.ViborBludaText.setObjectName("ViborBludaText")
self.NazvanieBluda = QtWidgets.QLabel(self.centralwidget)
self.NazvanieBluda.setGeometry(QtCore.QRect(280, 350, 171, 21))
self.NazvanieBluda.setObjectName("NazvanieBluda")
self.TextBluda = QtWidgets.QLabel(self.centralwidget)
self.TextBluda.setGeometry(QtCore.QRect(70, 30, 241, 171))
self.TextBluda.setObjectName("TextBluda")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(280, 370, 171, 131))
self.label_2.setText("")
self.label_2.setObjectName("label_2")
self.photo = QtWidgets.QLabel(self.centralwidget)
self.photo.setGeometry(QtCore.QRect(60, 350, 211, 151))
self.photo.setText("")
self.photo.setObjectName("photo")
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.ComboViborBluda.setItemText(0, _translate("MainWindow", "*Блюдо не выбрано*"))
self.ComboViborBluda.setItemText(1, _translate("MainWindow", "Гамбургер"))
self.ComboViborBluda.setItemText(2, _translate("MainWindow", "Пицца"))
self.ComboViborBluda.setItemText(3, _translate("MainWindow", "Салат \"Цезарь\""))
self.ComboViborBluda.setItemText(4, _translate("MainWindow", "Салат \"Греческий\""))
self.ComboViborBluda.setItemText(5, _translate("MainWindow", "Картошка Фри"))
self.ComboViborBluda.setItemText(6, _translate("MainWindow", "Картошка по-деревенски (Айдахо)"))
self.ComboViborBluda.setItemText(7, _translate("MainWindow", "Наггетсы"))
self.ComboViborBluda.setItemText(8, _translate("MainWindow", "Крылышки"))
self.ViborBludaText.setText(_translate("MainWindow", "Выберите блюдо, чтобы узнать его БЖУ:"))
self.NazvanieBluda.setText(_translate("MainWindow", "Название блюда"))
self.TextBluda.setText(
_translate("MainWindow", "<html><head/><body><p>Текст для библиотеки блюд</p></body></html>"))