Исправить ошибку NameError: name 'Main' is not defined

Подскажите где ошибка в коде. При изменении класса MyOpen на Main выдает ошибку

'Main' object has no attribute 'setModal'

и указывает на строку Open.setModal(False)

from PyQt5 import QtCore, QtGui, QtWidgets
from nas_ser import Ui_nas_ser

class Ui_Open(object):
    def setupUi(self, Open):
        Open.setObjectName("Open")
        Open.resize(320, 240)
        Open.setMaximumSize(QtCore.QSize(320, 240))
        Open.setWindowFilePath("")
        Open.setModal(False)
        self.lineEdit = QtWidgets.QLineEdit(Open)
        self.lineEdit.setGeometry(QtCore.QRect(130, 100, 180, 25))
        self.lineEdit.setMaxLength(10)
        self.lineEdit.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit.setObjectName("lineEdit")
        self.comboBox_vx = QtWidgets.QComboBox(Open)
        self.comboBox_vx.setGeometry(QtCore.QRect(130, 60, 180, 25))
        self.comboBox_vx.setObjectName("comboBox_vx")
        self.comboBox_vx.addItem("")
        self.comboBox_vx.addItem("")
        self.label = QtWidgets.QLabel(Open)
        self.label.setGeometry(QtCore.QRect(20, 60, 100, 25))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Open)
        self.label_2.setGeometry(QtCore.QRect(20, 100, 60, 25))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.checkBox_ = QtWidgets.QCheckBox(Open)
        self.checkBox_.setEnabled(True)
        self.checkBox_.setGeometry(QtCore.QRect(20, 150, 231, 17))
        self.checkBox_.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.checkBox_.setAutoFillBackground(False)
        self.checkBox_.setObjectName("checkBox_")
        self.label_3 = QtWidgets.QLabel(Open)
        self.label_3.setGeometry(QtCore.QRect(20, 10, 280, 20))
        font = QtGui.QFont()
        font.setPointSize(11)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        font.setKerning(True)
        self.label_3.setFont(font)
        self.label_3.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_3.setTextFormat(QtCore.Qt.AutoText)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(Open)
        self.pushButton.setGeometry(QtCore.QRect(160, 200, 75, 25))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Open)
        self.pushButton_2.setGeometry(QtCore.QRect(240, 200, 75, 25))
        self.pushButton_2.setObjectName("pushButton_2")
        self.toolButton = QtWidgets.QToolButton(Open)
        self.toolButton.setGeometry(QtCore.QRect(30, 200, 110, 25))
        self.toolButton.setObjectName("toolButton")

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

    def retranslateUi(self, Open):
        _translate = QtCore.QCoreApplication.translate
        Open.setWindowTitle(_translate("Open", "Учет кабельных линий связи - Вход"))
        self.comboBox_vx.setItemText(0, _translate("Open", "Администратор"))
        self.comboBox_vx.setItemText(1, _translate("Open", "Оператор"))
        self.label.setText(_translate("Open", "Пользователь:"))
        self.label_2.setText(_translate("Open", "Пароль:"))
        self.checkBox_.setText(_translate("Open", "Гость - авторизации не требуется"))
        self.label_3.setText(_translate("Open", "Авторизация пользователя"))
        self.pushButton.setText(_translate("Open", "Войти"))
        self.pushButton_2.setText(_translate("Open", "Отмена"))
        self.toolButton.setText(_translate("Open", "Параметры"))

class MyOpen(QtWidgets.QWidget, Ui_Open):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)

        self.toolButton.clicked.connect(self.onClicked)

    def onClicked(self):
        self.nast = MyNast()
        self.nast.show()


class MyNast(QtWidgets.QWidget, Ui_nas_ser):
        def __init__(self, parent=None):
            super(MyNast, self).__init__(parent)
            self.setupUi(self)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)

    #Open = QtWidgets.QDialog()
    #ui = Ui_Open()
    #ui.setupUi(Open)
    #Open.show()
    w = Main()
    w = show()

    sys.exit(app.exec_())

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

Автор решения: S. Nick

Я же вам написал - Если вас будет интересовать что-то еще - опубликуйте модуль nas_ser.py

Ваша проблема в том, что при создании формы в Qt Designer вы использовали класс QDialog, а при создании главного окна вы почему-то наследуетесь от QWidget - это не правильно.

from PyQt5 import QtCore, QtGui, QtWidgets
#from nas_ser import Ui_nas_ser

class Ui_Open(object):
    def setupUi(self, Open):
        Open.setObjectName("Open")
        Open.resize(320, 240)
        Open.setMaximumSize(QtCore.QSize(320, 240))
        Open.setWindowFilePath("")
        Open.setModal(False)
        self.lineEdit = QtWidgets.QLineEdit(Open)
        self.lineEdit.setGeometry(QtCore.QRect(130, 100, 180, 25))
        self.lineEdit.setMaxLength(10)
        self.lineEdit.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit.setObjectName("lineEdit")
        self.comboBox_vx = QtWidgets.QComboBox(Open)
        self.comboBox_vx.setGeometry(QtCore.QRect(130, 60, 180, 25))
        self.comboBox_vx.setObjectName("comboBox_vx")
        self.comboBox_vx.addItem("")
        self.comboBox_vx.addItem("")
        self.label = QtWidgets.QLabel(Open)
        self.label.setGeometry(QtCore.QRect(20, 60, 100, 25))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Open)
        self.label_2.setGeometry(QtCore.QRect(20, 100, 60, 25))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.checkBox_ = QtWidgets.QCheckBox(Open)
        self.checkBox_.setEnabled(True)
        self.checkBox_.setGeometry(QtCore.QRect(20, 150, 231, 17))
        self.checkBox_.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.checkBox_.setAutoFillBackground(False)
        self.checkBox_.setObjectName("checkBox_")
        self.label_3 = QtWidgets.QLabel(Open)
        self.label_3.setGeometry(QtCore.QRect(20, 10, 280, 20))
        font = QtGui.QFont()
        font.setPointSize(11)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        font.setKerning(True)
        self.label_3.setFont(font)
        self.label_3.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_3.setTextFormat(QtCore.Qt.AutoText)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(Open)
        self.pushButton.setGeometry(QtCore.QRect(160, 200, 75, 25))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Open)
        self.pushButton_2.setGeometry(QtCore.QRect(240, 200, 75, 25))
        self.pushButton_2.setObjectName("pushButton_2")
        self.toolButton = QtWidgets.QToolButton(Open)
        self.toolButton.setGeometry(QtCore.QRect(30, 200, 110, 25))
        self.toolButton.setObjectName("toolButton")

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

    def retranslateUi(self, Open):
        _translate = QtCore.QCoreApplication.translate
        Open.setWindowTitle(_translate("Open", "Учет кабельных линий связи - Вход"))
        self.comboBox_vx.setItemText(0, _translate("Open", "Администратор"))
        self.comboBox_vx.setItemText(1, _translate("Open", "Оператор"))
        self.label.setText(_translate("Open", "Пользователь:"))
        self.label_2.setText(_translate("Open", "Пароль:"))
        self.checkBox_.setText(_translate("Open", "Гость - авторизации не требуется"))
        self.label_3.setText(_translate("Open", "Авторизация пользователя"))
        self.pushButton.setText(_translate("Open", "Войти"))
        self.pushButton_2.setText(_translate("Open", "Отмена"))
        self.toolButton.setText(_translate("Open", "Параметры"))

#class MyOpen(QtWidgets.QWidget, Ui_Open):
class Main(QtWidgets.QDialog, Ui_Open):                              #  QDialog          
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)

        self.toolButton.clicked.connect(self.onClicked)

    def onClicked(self):
        self.nast = MyNast()
        self.nast.show()


class MyNast(QtWidgets.QWidget): #, Ui_nas_ser):
        def __init__(self, parent=None):
            super(MyNast, self).__init__(parent)
#            self.setupUi(self)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)

    w = Main()
#    w = show()
    w.show()                                                       # w.show()

    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка