Проблема Переопределить метод класса в Python

Rand0m_M

Green Team
16.04.2018
33
28
BIT
1
Есть вот такой клас на питоне:
Python:
class Ui_Form(object):
 14     def setupUi(self, Form):
 15         Form.setObjectName("Form")
 16         Form.resize(454, 102)
 17         Form.setWindowIcon(QtGui.QIcon("gnome-dev-wavelan.png"))
 18         self.pushButton = QtWidgets.QPushButton(Form)
 19         self.pushButton.setGeometry(QtCore.QRect(10, 60, 431, 27))
 20         self.pushButton.setCheckable(False)
 21         self.pushButton.setObjectName("pushButton")
 22
 23         self.label = QtWidgets.QLabel(Form)
 24         self.label.setGeometry(QtCore.QRect(120, 20, 221, 20))
 25         self.label.setObjectName("label")
 26
 27         self.retranslateUi(Form)
 28         QtCore.QMetaObject.connectSlotsByName(Form)
 29
 30     def retranslateUi(self, Form):
 31         _translate = QtCore.QCoreApplication.translate
 32         Form.setWindowTitle(_translate("Form", "WIFI AP"))
 33         self.pushButton.setText(_translate("Form", "OK"))
 34
 35         self.label.setText(_translate("Form", "Точка доступа успешно создана!"))
Код вызывает окошко с сообщением и кнопкой "ок" по которой окно закрывается, нужно создать такое же окно но с надписью о ошибке(ну если произойдёт), не писать же заново этот класс ради только одной изменнёной строчки, подскажите как правильно его наследовать чтобы переопределить метод retranslateUI чтобы он выводил изменнённую строку сообщения. Только начинаю вникать в ооп на питоне ..
 

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
Есть вот такой клас на питоне:
Для начала я так скажу - нужно код выкладывать в рабочем состоянии. Думаете кому-то хочется номера строк стирать и отступы по новой выставлять? Код всегда желательно полностью выкладывать, чтобы можно было запустить и посмотреть результаты.

Python:
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(454, 102)
        Form.setWindowIcon(QtGui.QIcon("gnome-dev-wavelan.png"))
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(10, 60, 431, 27))
        self.pushButton.setCheckable(False)
        self.pushButton.setObjectName("pushButton")

        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(120, 20, 221, 20))
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "WIFI AP"))
        self.pushButton.setText(_translate("Form", "OK"))

        self.label.setText(_translate("Form", "Точка доступа успешно создана!"))
Иначе нормальных ответов не будет...

python.jpg


P.S. Тут скорее подойдёт сделать расширенный класс
 
Последнее редактирование:
  • Нравится
Реакции: Vander и Tayler

sm0ke

Green Team
30.11.2017
15
46
BIT
0
Самый простой вариант написать новый класс, используя метод super(), унаследовать все из твоего первого класса и написать простую функцию с кнопками, которые тебе нужны.
 

Rand0m_M

Green Team
16.04.2018
33
28
BIT
1
Этот клас был создан из кода разметки qt designer командой pyuic5, его можно было написать и проще, но хотелось потренироватся с дизайнером. Свой вопрос решил так, есть запускающий класс, который я отнаследовал и переопределил в нём надпись которая задана в основном класе от qt designer. Теперь вызывав нужный клас получаю окно с нужным сообщением. Все работает, правда незнаю насколько коректно такое решение. Вот код, в зависимости от значения переменной "а" запускается окно с нужным сообщением. Код тестовый, но уже рабочий. Переменная ico64 содержит иконку окна в base64.

Python:
from PyQt5 import QtCore, QtGui, QtWidgets

icon64 = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA3WAAAN1gGQb3mcAAAACXZwQWcAAAAYAAAAGAB4TKWmAAAABmJLR0QA/gD+AP7rGNSCAAAEs0lEQVRIx8VVe0yTVxRHp5tbdMb42JL9sbmZbbA4DFAg4DJQt2kECXMsA3mJpaVQkRZWHhX4bKEtpTxaQN7tR18g4mAw5CEPeQ1IoeWRgWZMgcQ5x1Re4TEeZ/cSXBaztbBk2U1Ovtt7fr/zu+f0nnvNzP6XAbDFyYnYZkYQW43ikN+JaDaN++vABGuadt/fkQgCtmJ7XgTjrWm52zey9S2UAM3bTsGlO//kK5p3hBR172UV9b0RXqB/Exue4zXswxjHgMJd1jTyHcw3Gt6Oqn0N7eb9Z2U6Q9QeulTY/h67UG/JVvTasxT9H2HDc2ZGt42fsMn6vLx1P4ZbUZXmFH/F60YFbOkqS1uq8iCeu/CqLL0Sa53DC/uOhkpu+MQliPQhFxmLASGh3cy0cloEaTjtm9zm7smvOxah7D+AM6cEao4YFaDQta4OQcoDUZqBPSejv/W7IOt0ZSsMHgFMVs/s7CzMzExDuiwVAkI5d9nyfkZQVqe/W1wNK1yut3Anqt+1oWrcjArY0DRMj8hbu9GODh6PqBCH5eg82aQhxMvHa2l8fBSmpydhaGgQzvl6L7MVfTkX83VhJzmV+WGkwZGa1WluQ1OHGc8gUB18IrLiMEsxcPiTryuyL0g7OCyyh09jcaalaOc4OP4GhnMXUWbVtMxO6amoypLwIv2pLxObPqPQNZdMCGjOObPLzqJTYusSXSV1I2qVEWS/lJuSs8AhBODt5wPMmASIlF1bDicNbV8Q9XWu8Tc1bFJ/9jT3u2BbqsbXqAA6Ccccgq/Fs+UGh6DsroCPw8oGGOLy5kyyGOp6xoGbXQnq5hGQKKqAkVbzoxPrxr3g7O54lkL/lVNYWTqFrj5uVOADj9IXbWnqQve42kBM8hE3yT4NLZon8uogt7QJotO0K7LiFuBk1cGJUNWir6T1OsqE45FQH2dH16ow32SrWVFLzO2DNA2ovn6Rhe1RQkny6tVyPbhzVHA0SLXqwiZBel0HAknKMkfemcG42hVtzyjusKOrLTZ8XdhQVb52QVodW1TQUFlVARO/TcD8/BwM3xkCpZqE+6P3AK+zRPIuFHyQQled3/R9Z0XVfshNSJ55FixVKlltaLwFk5OTMI364cHPD4AQin432Vz/NMTixCPZuZkwNzcHyaniZQ5f8jQvPxtGfhpZa7iFhQXAfoz7VwIicaKsvaMVevU9kCaVLHd1d66JNd9uhOQU0RJex36M23RwmUz2UlKy4OnU1CS0tbXAzOwMDAz2Q0aWdEWUlJCXlMT/XEEWAPYj3GOM35RAgvCKZ0mpFiYmfoWlpSUYGxsFXH9SKQexRLiQKOB9LxTzpx49+gUwjuDFeiPahh6dF5C9LBDyGoeGf4D6BnT+Ud2ra6pgYKAfnjx5DIuLizA6en+tPD29OrhzdxgEIv4I4u3GXFNCuFF2IcLY7ZYmfHOu+Pj7+DNDg3kx3MibfAHxMCMrHb6pKANdTzfgDPAti/6HFcTbh7nIthkTwC/SjliCy8EiMZejROj3W8gOIcMPkYWdo50zI4TOvhwbpRIm8R6i4Mu8xCsVyPeqqeDPC+Fy4Sdx53r6e5HtX//uWQ/4CrLtG63/fzL+AL1xnFO2ijNgAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTA3LTA1VDE0OjE0OjEwLTAwOjAwfH04SwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0wNy0wNVQxNDoxNDoxMC0wMDowMA0ggPcAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC'

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(300, 70)
                
        ### вставляем иконку в заголовок окна, иконка сконвертирована в base64
        ico = QtCore.QByteArray.fromBase64(icon64)
        pixmap = QtGui.QPixmap()
        if pixmap.loadFromData(ico,'PNG'):
            Form.setWindowIcon(QtGui.QIcon(pixmap))
        
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(10, 35, 280, 27))
        self.pushButton.setCheckable(False)
        self.pushButton.setObjectName("pushButton")
        
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(40, 10, 240, 15))
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "WIFI AP"))
        self.pushButton.setText(_translate("Form", "OK"))

        self.label.setText(_translate("Form", "Точка доступа успешно создана!"))

####################

import sys

class MyWin(QtWidgets.QMainWindow):
    def __init__(self,parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

        self.ui.pushButton.clicked.connect(QtCore.QCoreApplication.instance().quit)

##################
class MyWinERR(MyWin):
    def __init__(self):
        super().__init__() ### вызываем инит родительского класса
        _translate = QtCore.QCoreApplication.translate
        self.ui.label.setText(_translate("Form", "Ошибка создания точки доступа!"))
##################


def run(value):
    app = QtWidgets.QApplication(sys.argv)
    if value == 1:
        myapp = MyWinERR()
    else:
        myapp = MyWin()
    myapp.show()
    sys.exit(app.exec_())

a = 1

if a == 1:
    run(a)
else:
    run(a)
 

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
А это ещё зачем?
Конструкция лишённая смысла...

Python:
a = 1

if a == 1:
    run(a)
else:
    run(a)
 

Rand0m_M

Green Team
16.04.2018
33
28
BIT
1
А это ещё зачем?
Конструкция лишённая смысла...

Python:
a = 1

if a == 1:
    run(a)
else:
    run(a)
Согласен, просто как тест для запуска окошка было прикручено, если переменная а==1 запускаем окошко с ошибкой, если чтото другое то окошко с сообщением об успехе, можно конечно вызывать функцию run() и напрямую передвать ей нужное значение, просто эта конструкция во время тестов там появилась и осталась. Я же писал что код тестовый.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!