Как передать значение в функцию?
Как правильно передать значение D в функцию retranslateUi, как это можно осуществить?
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import QMessageBox
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(400, 600)
MainWindow.setMinimumSize(QtCore.QSize(400, 600))
MainWindow.setMaximumSize(QtCore.QSize(400, 600))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("D:/Мои документы/Загрузки/Музыка/Монтажная-область-1.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
MainWindow.setStyleSheet("background-color: rgb(0, 170, 255);")
MainWindow.setAnimated(True)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(-20, -10, 451, 101))
self.frame.setStyleSheet("background-color: rgb(170, 255, 127);")
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.nazvanie = QtWidgets.QLabel(self.frame)
self.nazvanie.setEnabled(True)
self.nazvanie.setGeometry(QtCore.QRect(20, 20, 400, 30))
self.nazvanie.setMinimumSize(QtCore.QSize(400, 0))
self.nazvanie.setMaximumSize(QtCore.QSize(400, 16777215))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setPointSize(14)
font.setBold(False)
font.setWeight(50)
self.nazvanie.setFont(font)
self.nazvanie.setObjectName("nazvanie")
self.primer = QtWidgets.QLabel(self.frame)
self.primer.setEnabled(True)
self.primer.setGeometry(QtCore.QRect(20, 50, 400, 40))
self.primer.setMinimumSize(QtCore.QSize(400, 0))
self.primer.setMaximumSize(QtCore.QSize(400, 16777215))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.primer.setFont(font)
self.primer.setObjectName("primer")
self.a_rav = QtWidgets.QLabel(self.centralwidget)
self.a_rav.setGeometry(QtCore.QRect(20, 107, 26, 24))
font = QtGui.QFont()
font.setPointSize(15)
self.a_rav.setFont(font)
self.a_rav.setObjectName("a_rav")
self.b_rav = QtWidgets.QLabel(self.centralwidget)
self.b_rav.setGeometry(QtCore.QRect(20, 157, 26, 24))
font = QtGui.QFont()
font.setPointSize(15)
self.b_rav.setFont(font)
self.b_rav.setObjectName("b_rav")
self.c_rav = QtWidgets.QLabel(self.centralwidget)
self.c_rav.setGeometry(QtCore.QRect(20, 207, 26, 24))
font = QtGui.QFont()
font.setPointSize(15)
self.c_rav.setFont(font)
self.c_rav.setObjectName("c_rav")
self.vvod_a = QtWidgets.QLineEdit(self.centralwidget)
self.vvod_a.setGeometry(QtCore.QRect(50, 110, 41, 22))
font = QtGui.QFont()
font.setPointSize(15)
self.vvod_a.setFont(font)
self.vvod_a.setMouseTracking(True)
self.vvod_a.setAutoFillBackground(False)
self.vvod_a.setMaxLength(3)
self.vvod_a.setFrame(True)
self.vvod_a.setEchoMode(QtWidgets.QLineEdit.Normal)
self.vvod_a.setDragEnabled(False)
self.vvod_a.setObjectName("vvod_a")
self.vvod_c = QtWidgets.QLineEdit(self.centralwidget)
self.vvod_c.setGeometry(QtCore.QRect(50, 210, 41, 22))
font = QtGui.QFont()
font.setPointSize(15)
self.vvod_c.setFont(font)
self.vvod_c.setMouseTracking(True)
self.vvod_c.setAutoFillBackground(False)
self.vvod_c.setMaxLength(3)
self.vvod_c.setFrame(True)
self.vvod_c.setObjectName("vvod_c")
self.vvod_b = QtWidgets.QLineEdit(self.centralwidget)
self.vvod_b.setGeometry(QtCore.QRect(50, 160, 41, 22))
font = QtGui.QFont()
font.setPointSize(15)
self.vvod_b.setFont(font)
self.vvod_b.setMouseTracking(True)
self.vvod_b.setAutoFillBackground(False)
self.vvod_b.setMaxLength(3)
self.vvod_b.setFrame(True)
self.vvod_b.setObjectName("vvod_b")
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(0, 250, 100, 16))
self.line.setFrameShadow(QtWidgets.QFrame.Plain)
self.line.setLineWidth(3)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setObjectName("line")
self.line_2 = QtWidgets.QFrame(self.centralwidget)
self.line_2.setGeometry(QtCore.QRect(91, 91, 15, 166))
self.line_2.setFrameShadow(QtWidgets.QFrame.Plain)
self.line_2.setLineWidth(3)
self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
self.line_2.setObjectName("line_2")
self.btn_resh = QtWidgets.QPushButton(self.centralwidget)
self.btn_resh.setGeometry(QtCore.QRect(10, 280, 81, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.btn_resh.setFont(font)
self.btn_resh.setStyleSheet("background-color: rgb(255, 170, 0);\n"
"color: rgb(0, 0, 0);")
self.btn_resh.setObjectName("btn_resh")
self.btn_resh.clicked.connect(self.Knopka)
self.resh_text = QtWidgets.QLabel(self.centralwidget)
self.resh_text.setGeometry(QtCore.QRect(-200, 110, 94, 31))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.resh_text.setFont(font)
self.resh_text.setObjectName("resh_text")
self.vvod_text = QtWidgets.QLabel(self.centralwidget)
self.vvod_text.setGeometry(QtCore.QRect(110, 100, 230, 31))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
self.vvod_text.setFont(font)
self.vvod_text.setObjectName("vvod_text")
MainWindow.setCentralWidget(self.centralwidget)
self.error_text = QtWidgets.QLabel(self.centralwidget)
self.error_text.setGeometry(QtCore.QRect(-310, 100, 230, 31))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
self.error_text.setFont(font)
self.error_text.setObjectName("error_text")
MainWindow.setCentralWidget(self.centralwidget)
self.dis = QtWidgets.QLabel(self.centralwidget)
self.dis.setGeometry(QtCore.QRect(-200, 110, 94, 31))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.dis.setFont(font)
self.dis.setObjectName("dis")
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def Knopka(self):
if self.vvod_a.text() != '' and self.vvod_b.text() != '' and self.vvod_c.text() != '':
try:
a = int(self.vvod_a.text())
b = int(self.vvod_b.text())
c = int(self.vvod_c.text())
D = b*b - 4*a*c #---ЭТО ЗНАЧЕНИЕ НУЖНО
print(str(D))
self.vvod_text.move(-310, 100)
self.resh_text.move(110, 100)
except:
error = QMessageBox()
error.setWindowTitle("Ошибка!")
error.setText("Введены некорректные значения!")
error.setIcon(QMessageBox.Warning)
error.setStandardButtons(QMessageBox.Ok)
error.exec_()
else:
a = str(self.vvod_a.text())
b = str(self.vvod_b.text())
c = str(self.vvod_c.text())
error = QMessageBox()
error.setWindowTitle("Ошибка!")
error.setText("Введены не все значения!")
error.setIcon(QMessageBox.Warning)
error.setStandardButtons(QMessageBox.Ok)
if a == '':
error.setDetailedText('Отсутствует значение a!')
error.exec_()
elif b == '':
error.setDetailedText('Отсутствует значение b!')
error.exec_()
elif c == '':
error.setDetailedText('Отсутствует значение c!')
error.exec_()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Решатель квадратных уравнений"))
self.nazvanie.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">Решатель квадратных уравнений</p></body></html>"))
self.primer.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">x²+bx+c=0</p></body></html>"))
self.a_rav.setText(_translate("MainWindow", "а="))
self.b_rav.setText(_translate("MainWindow", "b="))
self.c_rav.setText(_translate("MainWindow", "c="))
self.btn_resh.setText(_translate("MainWindow", "Решить!"))
self.resh_text.setText(_translate("MainWindow", "Решение:"))
self.vvod_text.setText(_translate("MainWindow", "Введите коофиценты..."))
self.error_text.setText(_translate("MainWindow", "Проверьте ввод!"))
self.dis.setText(_translate("MainWindow", "D = b²-4ac\nD = " + D))#---НУЖНО ПЕРЕДАТЬ СЮДА
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (2 шт):
Автор решения: anonym
→ Ссылка
Нужно переменную D сделать глобальной в функции где задаётся значение переменной и в функции куда нужно передать значение переменной:
def Knopka(self):
if self.vvod_a.text() != '' and self.vvod_b.text() != '' and self.vvod_c.text() != '':
try:
global D
a = int(self.vvod_a.text())
b = int(self.vvod_b.text())
c = int(self.vvod_c.text())
D = b*b - 4*a*c #---ЭТО ЗНАЧЕНИЕ НУЖНО
print(str(D))
self.vvod_text.move(-310, 100)
self.resh_text.move(110, 100)
᠌᠌ ᠌
def retranslateUi(self, MainWindow):
global D
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Решатель квадратных уравнений"))
self.nazvanie.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">Решатель квадратных уравнений</p></body></html>"))
self.primer.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">x²+bx+c=0</p></body></html>"))
self.a_rav.setText(_translate("MainWindow", "а="))
self.b_rav.setText(_translate("MainWindow", "b="))
self.c_rav.setText(_translate("MainWindow", "c="))
self.btn_resh.setText(_translate("MainWindow", "Решить!"))
self.resh_text.setText(_translate("MainWindow", "Решение:"))
self.vvod_text.setText(_translate("MainWindow", "Введите коофиценты..."))
self.error_text.setText(_translate("MainWindow", "Проверьте ввод!"))
self.dis.setText(_translate("MainWindow", "D = b²-4ac\nD = " + D))#---НУЖНО ПЕРЕДАТЬ СЮДА
Автор решения: S. Nick
→ Ссылка
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(400, 600)
MainWindow.setMinimumSize(QtCore.QSize(400, 600))
MainWindow.setMaximumSize(QtCore.QSize(400, 600))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("D:/Мои документы/Загрузки/Музыка/Монтажная-область-1.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
MainWindow.setStyleSheet("background-color: rgb(0, 170, 255);")
MainWindow.setAnimated(True)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(-20, -10, 451, 101))
self.frame.setStyleSheet("background-color: rgb(170, 255, 127);")
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.nazvanie = QtWidgets.QLabel(self.frame)
self.nazvanie.setEnabled(True)
self.nazvanie.setGeometry(QtCore.QRect(20, 20, 400, 30))
self.nazvanie.setMinimumSize(QtCore.QSize(400, 0))
self.nazvanie.setMaximumSize(QtCore.QSize(400, 16777215))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setPointSize(14)
font.setBold(False)
font.setWeight(50)
self.nazvanie.setFont(font)
self.nazvanie.setObjectName("nazvanie")
self.primer = QtWidgets.QLabel(self.frame)
self.primer.setEnabled(True)
self.primer.setGeometry(QtCore.QRect(20, 50, 400, 40))
self.primer.setMinimumSize(QtCore.QSize(400, 0))
self.primer.setMaximumSize(QtCore.QSize(400, 16777215))
font = QtGui.QFont()
font.setFamily("Arial Black")
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.primer.setFont(font)
self.primer.setObjectName("primer")
self.a_rav = QtWidgets.QLabel(self.centralwidget)
self.a_rav.setGeometry(QtCore.QRect(20, 107, 26, 24))
font = QtGui.QFont()
font.setPointSize(15)
self.a_rav.setFont(font)
self.a_rav.setObjectName("a_rav")
self.b_rav = QtWidgets.QLabel(self.centralwidget)
self.b_rav.setGeometry(QtCore.QRect(20, 157, 26, 24))
font = QtGui.QFont()
font.setPointSize(15)
self.b_rav.setFont(font)
self.b_rav.setObjectName("b_rav")
self.c_rav = QtWidgets.QLabel(self.centralwidget)
self.c_rav.setGeometry(QtCore.QRect(20, 207, 26, 24))
font = QtGui.QFont()
font.setPointSize(15)
self.c_rav.setFont(font)
self.c_rav.setObjectName("c_rav")
self.vvod_a = QtWidgets.QLineEdit(self.centralwidget)
self.vvod_a.setGeometry(QtCore.QRect(50, 110, 41, 22))
font = QtGui.QFont()
font.setPointSize(15)
self.vvod_a.setFont(font)
self.vvod_a.setMouseTracking(True)
self.vvod_a.setAutoFillBackground(False)
self.vvod_a.setMaxLength(3)
self.vvod_a.setFrame(True)
self.vvod_a.setEchoMode(QtWidgets.QLineEdit.Normal)
self.vvod_a.setDragEnabled(False)
self.vvod_a.setObjectName("vvod_a")
self.vvod_c = QtWidgets.QLineEdit(self.centralwidget)
self.vvod_c.setGeometry(QtCore.QRect(50, 210, 41, 22))
font = QtGui.QFont()
font.setPointSize(15)
self.vvod_c.setFont(font)
self.vvod_c.setMouseTracking(True)
self.vvod_c.setAutoFillBackground(False)
self.vvod_c.setMaxLength(3)
self.vvod_c.setFrame(True)
self.vvod_c.setObjectName("vvod_c")
self.vvod_b = QtWidgets.QLineEdit(self.centralwidget)
self.vvod_b.setGeometry(QtCore.QRect(50, 160, 41, 22))
font = QtGui.QFont()
font.setPointSize(15)
self.vvod_b.setFont(font)
self.vvod_b.setMouseTracking(True)
self.vvod_b.setAutoFillBackground(False)
self.vvod_b.setMaxLength(3)
self.vvod_b.setFrame(True)
self.vvod_b.setObjectName("vvod_b")
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(0, 250, 100, 16))
self.line.setFrameShadow(QtWidgets.QFrame.Plain)
self.line.setLineWidth(3)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setObjectName("line")
self.line_2 = QtWidgets.QFrame(self.centralwidget)
self.line_2.setGeometry(QtCore.QRect(91, 91, 15, 166))
self.line_2.setFrameShadow(QtWidgets.QFrame.Plain)
self.line_2.setLineWidth(3)
self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
self.line_2.setObjectName("line_2")
self.btn_resh = QtWidgets.QPushButton(self.centralwidget)
self.btn_resh.setGeometry(QtCore.QRect(10, 280, 81, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.btn_resh.setFont(font)
self.btn_resh.setStyleSheet("background-color: rgb(255, 170, 0);\n"
"color: rgb(0, 0, 0);")
self.btn_resh.setObjectName("btn_resh")
#- self.btn_resh.clicked.connect(self.Knopka)
self.resh_text = QtWidgets.QLabel(self.centralwidget)
self.resh_text.setGeometry(QtCore.QRect(-200, 180, 94, 31))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.resh_text.setFont(font)
self.resh_text.setObjectName("resh_text")
self.vvod_text = QtWidgets.QLabel(self.centralwidget)
self.vvod_text.setGeometry(QtCore.QRect(110, 100, 230, 31))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
self.vvod_text.setFont(font)
self.vvod_text.setObjectName("vvod_text")
MainWindow.setCentralWidget(self.centralwidget)
self.error_text = QtWidgets.QLabel(self.centralwidget)
self.error_text.setGeometry(QtCore.QRect(-310, 100, 230, 31))
# self.error_text.setGeometry(QtCore.QRect(200, 300, 230, 61))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
self.error_text.setFont(font)
self.error_text.setObjectName("error_text")
MainWindow.setCentralWidget(self.centralwidget)
self.dis = QtWidgets.QLabel(self.centralwidget)
# self.dis.setGeometry(QtCore.QRect(-200, 210, 94, 31))
self.dis.setGeometry(QtCore.QRect(200, 210, 94, 61))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.dis.setFont(font)
self.dis.setObjectName("dis")
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Решатель квадратных уравнений"))
self.nazvanie.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">Решатель квадратных уравнений</p></body></html>"))
self.primer.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">x²+bx+c=0</p></body></html>"))
self.a_rav.setText(_translate("MainWindow", "а="))
self.b_rav.setText(_translate("MainWindow", "b="))
self.c_rav.setText(_translate("MainWindow", "c="))
self.btn_resh.setText(_translate("MainWindow", "Решить!"))
self.resh_text.setText(_translate("MainWindow", "Решение:"))
self.vvod_text.setText(_translate("MainWindow", "Введите коофиценты..."))
# self.error_text.setText(_translate("MainWindow", "Проверьте ввод!"))
# - self.dis.setText(_translate("MainWindow", "D = b²-4ac\nD = " + D))#---НУЖНО ПЕРЕДАТЬ СЮДА
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.btn_resh.clicked.connect(self.knopka)
def knopka(self):
a = self.vvod_a.text()
b = self.vvod_b.text()
c = self.vvod_c.text()
if a and b and c:
try:
a = int(a)
b = int(b)
c = int(c)
D = b * b - (4 * a * c) # ЭТО ЗНАЧЕНИЕ НУЖНО
print(str(D))
# self.vvod_text.move(-310, 100)
#
self.vvod_text.hide()
self.resh_text.show()
self.resh_text.move(110, 180)
# НУЖНО ПЕРЕДАТЬ СЮДА
self.dis.setText(f"D = b²-4ac\nD = {D}") # !!! +++
except:
error = QMessageBox()
error.setWindowTitle("Ошибка!")
error.setText("Введены некорректные значения!")
error.setIcon(QMessageBox.Warning)
error.setStandardButtons(QMessageBox.Ok)
error.exec_()
else:
# a = str(self.vvod_a.text())
# b = str(self.vvod_b.text())
# c = str(self.vvod_c.text())
# +++
self.dis.clear()
self.resh_text.hide()
self.vvod_text.show()
error = QMessageBox()
error.setWindowTitle("Ошибка!")
error.setText("Введены не все значения!")
error.setIcon(QMessageBox.Warning)
error.setStandardButtons(QMessageBox.Ok)
if a == '':
error.setDetailedText('Отсутствует значение a!')
error.exec_()
elif b == '':
error.setDetailedText('Отсутствует значение b!')
error.exec_()
elif c == '':
error.setDetailedText('Отсутствует значение c!')
error.exec_()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
