Как сделать так, чтобы при нажатии кнопки в QLabel поместить результат расчета уравнения
Я хочу в рамках школьного проекта создать программу с помощью PyQt5, которая будет решать квадратные уравнения.
Сейчас я застрял на том, как сделать так, чтобы текст в табличке поменялся на значение дискриминанта при нажатии на кнопку.
import PyQt5
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
import math
import os
this_dir = os.path.dirname(os.path.abspath(__file__))
file = os.path.join(this_dir, 'file_name')
a, b, c = map(int, input("Введите a, b, c").split(" "))
D=b*b-4*a*c
d=math.sqrt(D)
x1=(-1*b-d)/2
x2=(-1*b+d)/2
class Window(QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setWindowTitle("Решение квадратного уравнения")
self.setGeometry(300, 300, 400 ,250)
self.mt = QtWidgets.QLabel(self)
self.mt.setText("Введите a, b, c:")
self.mt.adjustSize()
self.mt.move(50, 20)
self.mt1 = QtWidgets.QTextEdit(self)
self.mt1.move(50, 40)
self.mt1.setFixedWidth(100)
self.btn = QtWidgets.QPushButton(self)
self.btn.setText("Рассчитать")
self.btn.adjustSize()
self.btn.move(160, 40)
self.btn.setFixedHeight(30)
self.btn.clicked.connect(self.calc)
self.lb = QtWidgets.QLabel(self)
self.lb.move(50, 100)
self.lb.setText("3..2..1...")
self.lb.adjustSize()
def calc(self):
self.lb.adjustSize()
self.lb.setText("d=", d, "x1=", x1, "x2=", x2)
def application():
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
application()
Я пробовал заменить QLabel на QTextEdit или что-то еще, но всегда получается только изменить текст на другой, но никак не на значение.
Изучать PyQt5 начал недавно простите за глупые ошибки.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант:
import sys
import math
from PyQt5.QtWidgets import QMainWindow, QGridLayout, QGroupBox, \
QWidget, QPushButton, QLabel, QHBoxLayout, QVBoxLayout, \
QMessageBox, QApplication, QLineEdit
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont, QIcon, QPixmap
class FormBuilder(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.create_all_forms()
self.create_layers()
def create_all_forms(self):
self.heading_label = QLabel('Решение квадратного уравнения')
self.heading_label.setFont(QFont('Times', 13, QFont.Bold))
self.heading_label.setStyleSheet(
'border: 3px solid green; border-radius: 5px;')
self.entering_label = QLabel('Введите коэффициенты:')
self.entering_label.setFont(QFont('Times', 13))
self.a_value = QLineEdit(placeholderText='Значение a')
self.b_value = QLineEdit(placeholderText='Значение b')
self.c_value = QLineEdit(placeholderText='Значение c')
self.rez_label = QLabel()
self.rez_label.setMinimumHeight(50)
self.rez_label.setFont(QFont('Times', 15, QFont.Bold))
self.find_button = QPushButton('Найти')
self.clear_button = QPushButton('Очистить')
def create_layers(self):
v_layout = QVBoxLayout(self)
v_layout.addWidget(self.heading_label)
self.groupBox = QGroupBox(self.entering_label.text())
self.groupBox.setStyleSheet('''
QGroupBox {
margin-top: 2ex;
}
QGroupBox:enabled {
border: 3px solid green;
border-radius: 5px;
}
QGroupBox::title {
subcontrol-origin: margin;
left: 3ex;
}
''')
group_layout = QVBoxLayout(self.groupBox)
group_layout.addWidget(self.a_value)
group_layout.addWidget(self.b_value)
group_layout.addWidget(self.c_value)
v_layout.addWidget(self.groupBox)
v_layout.addWidget(self.rez_label)
h_layout = QHBoxLayout()
h_layout.addWidget(self.find_button)
h_layout.addWidget(self.clear_button)
v_layout.addLayout(h_layout)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.fb = FormBuilder()
self.fb.find_button.clicked.connect(self.calc)
self.fb.clear_button.clicked.connect(self.clear_form)
self.main_layout = QGridLayout(self.centralWidget)
self.main_layout.addWidget(self.fb, 0, 0, Qt.AlignTop)
def calc(self):
try:
a = float(self.fb.a_value.text()) \
if self.fb.a_value.text() else 1
b = float(self.fb.b_value.text()) \
if self.fb.b_value.text() else 1
c = float(self.fb.c_value.text()) \
if self.fb.c_value.text() else 1
except:
msg = QMessageBox.information(self,
'Внимание',
'Проверьте правильность заполгения коэффициентов.'
)
return
discr = (b*b) - (4*a*c)
if discr > 0:
x1 = (-b + math.sqrt(discr)) / (2 * a)
x2 = (-b - math.sqrt(discr)) / (2 * a)
rez = f"x1 = {x1:.2f};\nx2 = {x2:.2f}"
elif discr == 0:
x = -b / (2 * a)
rez = f"x = {x:.2f};"
else:
rez = "Корней нет"
self.fb.rez_label.setText(rez)
def clear_form(self):
self.fb.rez_label.clear()
self.fb.a_value.clear()
self.fb.b_value.clear()
self.fb.c_value.clear()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.setWindowTitle('КВУР')
w.resize(400, 250)
w.setWindowIcon(QIcon('lena-2.png'))
w.show()
sys.exit(app.exec_())
Спросите если что-то не понятно.
