Помогите разобраться с PyQt5,пожалуйста
Я уже создал приложение, используя QtDesigner, а сейчас понял что мне необходимо пофиксить некоторые моменты, но возвращаться и изменять параметры непосредственно в QtDesigner и заново конвертировать желания нет. В общем мне надо:
- запретить растягивание формы, чтоб была фиксация всегда той формы,что имеется
- изменить заголовок с "Form" на другой и добавить к нему Icon (например,классический Qt)
И еще есть один неприятный момент. Программа может сама закрыться, если встретила ошибку. Например, при нажатии на кнопку с lineEdit должна считываться информация и обрабатываться, но если , допустим, пользователь не указал ничего и нажал на кнопку, то она мгновенно закрывается. Как сделать так, чтобы программа не закрылась пока не нажмешь на красный крестик? Как прописать функцию ошибки? Подскажите как это прописать непосредственно в коде. Спасибо заранее.
Пример кода:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from testy import Ui_Form
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(199, 240)
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(50, 30, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(50, 70, 113, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.lineEdit_3 = QtWidgets.QLineEdit(Form)
self.lineEdit_3.setGeometry(QtCore.QRect(50, 120, 113, 20))
self.lineEdit_3.setObjectName("lineEdit_3")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(60, 170, 91, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "Сложить"))
class Widget(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.add_a_b)
def add_a_b(self):
a = int(self.lineEdit.text())
b = int(self.lineEdit_2.text())
self.lineEdit_3.setText(str(a + b)) # - (a + b)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
Ответы (1 шт):
Пожалуйста, всегда предоставляйте минимальный пример !!!
Смотрите комментарии по тексту примера.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from testy import Ui_Form
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(199, 240)
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(50, 30, 113, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(50, 70, 113, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.lineEdit_3 = QtWidgets.QLineEdit(Form)
self.lineEdit_3.setGeometry(QtCore.QRect(50, 120, 113, 20))
self.lineEdit_3.setObjectName("lineEdit_3")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(60, 170, 91, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "Сложить"))
class Widget(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
# запретить растягивание формы, чтоб была фиксация всегда той формы,что имеется
self.setFixedSize(self.size()) # <<<-----<
# изменить заголовок с "Form" на другой
self.setWindowTitle("другой заголовок") # <<<-----<
# добавить к нему Icon
self.setWindowIcon(QtGui.QIcon('im.png')) # <<<-----<
self.pushButton.clicked.connect(self.add_a_b)
def add_a_b(self):
# если , допустим, пользователь не указал ничего и нажал на кнопку, то она мгновенно закрывается.
if self.lineEdit.text() and self.lineEdit_2.text(): # <<<-----<
a = int(self.lineEdit.text())
b = int(self.lineEdit_2.text())
self.lineEdit_3.setText(str(a + b))
else:
msg = QtWidgets.QMessageBox.information(self, 'ВНИМАНИЕ', 'Заполните поля ввода!')
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
