Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:对象没有属性错误--子类化GUI PyQt4_Python_Qt_Pyqt_Pyqt4 - Fatal编程技术网

Python 属性错误:对象没有属性错误--子类化GUI PyQt4

Python 属性错误:对象没有属性错误--子类化GUI PyQt4,python,qt,pyqt,pyqt4,Python,Qt,Pyqt,Pyqt4,我添加了一个新的模式对话框,每当用户想要删除行时,它都会要求输入密码。我用Qt设计器创建了GUI。我无法在GUI中调用inventoryTable 每次调用secureDelete函数时,都会出现一个属性错误,表示“MainWindow\u ui”对象没有属性“inventoryTable” 谁能告诉我如何正确添加其他UI,以及如何在将来避免此属性错误 class Main(QtGui.QMainWindow): def __init__(self): QtGui.QMa

我添加了一个新的模式对话框,每当用户想要删除行时,它都会要求输入密码。我用Qt设计器创建了GUI。我无法在GUI中调用inventoryTable

每次调用secureDelete函数时,都会出现一个属性错误,表示“MainWindow\u ui”对象没有属性“inventoryTable”

谁能告诉我如何正确添加其他UI,以及如何在将来避免此属性错误

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)

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

在您作为confirmDialog的父项传递给self的特定情况下:

然后,在您的情况下,可以通过父方法访问Main,并执行以下操作:

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()
            [...]
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()
            [...]