属性错误:对象没有属性错误 - 继承GUI PyQt4

时间:2017-09-14 03:44:01

标签: python qt pyqt pyqt4

我添加了一个新的模式对话框,只要用户想要删除行,它就会要求输入密码。我用Qt Designer创建了GUI。我无法在GUI中调用inventoryTable。

每当我调用 secureDelete 函数时,都会出现属性错误,说"' MainWindow_ui'对象没有属性&inventory;'"。

有人能告诉我如何正确添加其他用户界面以及将来能够避免此属性错误吗?

class Main(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.db = Database()
        self.model = Model(self)
        self.ui = MainWindow_ui()
        self.ui.setupUi(self)

        self.ui.removeItem.clicked.connect(lambda: self.start_Secure())
        self.ui.removeItem.setShortcut("Del")

    def start_Secure(self):
        self.accessForm = confirmDialog(self)
        self.accessForm.show()

class confirmDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        super(confirmDialog, self).__init__(parent)
        self.model = Model()
        self.access_ui = Ui_Access()
        self.access_ui.setupUi(self)
        self.ui = MainWindow_ui()

        self.access_ui.username.returnPressed.connect(self.secureDelete)
        self.access_ui.password.returnPressed.connect(self.secureDelete)
        self.access_ui.confirmButton.clicked.connect(self.secureDelete)

    def secureDelete(self):
        members = {'user': 'password'}
        username = self.access_ui.username.text()
        password = self.access_ui.password.text()

        if username in members:
            enteredPass = members.get(username)
            indices = self.ui.inventoryTable.selectionModel().selectedRows()
            if password == enteredPass:
                for index in sorted(indices):
                    self.model.removeRow(index.row())
            else:
                self.model.revertRow(indices)

1 个答案:

答案 0 :(得分:1)

Qt Designer生成的类提供inventoryTable方法来创建设计元素,以便在您的情况下您没有调用它,因此从未创建confirmDialog,但甚至使用它来传递它函数无法实现您的目标,因为您将创建一个新实例。

在您的特定情况下,您已作为self.accessForm = confirmDialog(self) 的父级传递给自己:

parent()

然后,您可以通过class confirmDialog(QtGui.QDialog): def __init__(self, parent=None): [...] self.access_ui.setupUi(self) # self.ui = MainWindow_ui() [...] def secureDelete(self): [...] if username in members: enteredPass = members.get(username) indices = self.parent().ui.inventoryTable.selectionModel().selectedRows() [...] 方法访问Main,执行以下操作:

def sum13(nums):
    sum_ = 0
    for index, elem in enumerate(nums):
        if 13 not in nums[max(index-1, 0):index+1]:
            sum_ += elem
    return sum_