2017-09-14 36 views
0

新しいモーダルDialogを追加しました。ユーザーが行を削除したいときはいつでもパスワードを要求します。 Qt DesignerでGUIを作成しました。私は自分のGUIでinventoryTableを呼び出すことはできません。属性エラー:オブジェクトに属性エラーがありません - GUIのサブクラス化PyQt4

secureDelete関数を呼び出すたびに、「 'MainWindow_ui'オブジェクトには 'inventoryTable'属性がありません」という属性エラーが発生します。

他のユーザーインターフェイスを正しく追加する方法を教えてもらえますか、今後この属性のエラーを回避することはできますか? Qtのデザイナーによって生成された

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

クラスは、あなたのケースでは、あなたがそれを呼び出していないように、設計要素を作成するための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() 
      [...] 
関連する問題