2017-09-14 109 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() 
      [...] 
相關問題