Не могу закрыть текущие окно

При нажатие на кнопку должно закрыться окно, но не выходит.
Способ делал исходя из интернета.

from PyQt5.QtGui     import *
from PyQt5.QtCore    import *
from PyQt5.QtWidgets import *

class Start(object):

    def setupUi(self, MainWindow):
        ...
        ...
        ...

    def retranslateUi(self, MainWindow):
        ...
        ...
        ...
        self.pushButton_2.setText(_translate("MainWindow", "Далее"))
        self.pushButton_2.clicked.connect(self.next)

def next(self, MainWindow): # кнопка далее 

    from MAIN import Main

    mw = Main()
    self.close() # должно закрыть текущие окно
    mw.show()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Start()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

При нажатие на кнопку пишет, что Start(), не имеет атрибут close / hide.

Traceback (most recent call last):
  File "C:\Users\Stepan\Desktop\WoVBOT\StartUp.py", line 163, in next
    self.close()
AttributeError: 'Start' object has no attribute 'close'
Поток 'MainThread' (0x1) завершился с кодом 0 (0x0).
QObject::~QObject: Timers cannot be stopped from another thread
Программа "python.exe" завершилась с кодом -1 (0xffffffff).

Ответы (1 шт):

Автор решения: S. Nick
  1. Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

  2. Start - это не виджет. а object.

  3. Пожалуйста, предоставьте минимально-воспроизводимый пример.

  4. попробуйте так:


from PyQt5.QtGui     import *
from PyQt5.QtCore    import *
from PyQt5.QtWidgets import *

from MAIN import Main                                                     # +++


class Start(object):
    def setupUi(self, MainWindow):
        ...
        ...
        ...

    def retranslateUi(self, MainWindow):
        ...
        ...
        ...
        self.pushButton_2.setText(_translate("MainWindow", "Далее"))
#        self.pushButton_2.clicked.connect(self.next)

#def next(self, MainWindow): # кнопка далее 
#    from MAIN import Main
#    mw = Main()
#    self.close()                                     # должно закрыть текущие окно
#    mw.show()
    
    
class MainWindow(QtWidgets.QMainWindow, Start):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.pushButton_2.clicked.connect(self.next)        
        
    def next(self):                                  
        self.mw = Main()                             # !!! self
        self.mw.show()
        self.close()
        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    
#    MainWindow = QtWidgets.QMainWindow()
#    ui = Start()
#    ui.setupUi(MainWindow)
    
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
→ Ссылка