2017-09-14 110 views
0

我添加了一个新的模态对话框,每当用户想要删除行时都会要求输入密码。我使用Qt Designer创建了GUI。我无法在我的GUI中调用inventoryTable。属性错误:对象没有属性错误 - 子类化GUI PyQt4

每次我打电话给secureDelete函数,都会出现一个属性错误,说''MainWindow_ui'对象没有'inventoryTable'属性。

任何人都可以告诉我如何正确添加其他用户界面,并且能够避免将来出现此属性错误?

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

使用Qt Designer生成的类提供setupUi()方法创建的设计元素,使你的情况你还没有把它称为,因此永远不会创建的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() 
      [...] 
相关问题