2009-11-02 19 views
1

我试图让我的用户选择要打开的数据库。每个数据库将具有相同的模式。出于某种原因,虽然我无法让我的QTableView填充后,我打开数据库。qt - pyqt更改数据库时无法填充QTableView

我转述的示例代码,但是这应该给你什么,我试图做一个想法。

作品:

class aMainWindow(QMainWindow, Ui_MainWindow): 
    def __init__(self): 
     QMainWindow.__init__(self) 

     self.db = QSqlDatabase.addDatabase("QSQLITE") 

     self.db.setDatabaseName('testdb.db') 
     self.db.open() 

     # Set up the user interface from Designer. 
     self.setupUi(self) 

     #self.db.setDatabaseName('testdb.db') 

     self.model = QSqlTableModel(self) 
     self.model.setTable("records") 

     self.model.setSort(FILEORDER, Qt.AscendingOrder) 

     self.model.setHeaderData(ID, Qt.Horizontal, QVariant("ID")) 
     self.model.setHeaderData(FILEORDER, Qt.Horizontal, QVariant("File Order")) 
     self.model.setHeaderData(RECORDTYPE, Qt.Horizontal, QVariant("Type")) 
     self.model.setHeaderData(NAME, Qt.Horizontal, QVariant("Name")) 
     self.model.setHeaderData(PRESORTNAME, Qt.Horizontal, QVariant("Presort Name")) 
     self.model.setHeaderData(RECORD, Qt.Horizontal, QVariant("Record")) 
     self.model.select() 

     self.tableView.setModel(self.model) 
     #self.view.setSelectionMode(QTableView.SingleSelection) 
     #self.view.setSelectionBehavior(QTableView.SelectRows) 
     self.tableView.setColumnHidden(ID, True) 
     self.tableView.setColumnHidden(PRESORTNAME, True) 
     self.tableView.setColumnHidden(RECORD, True) 

不起作用:

class aMainWindow(QMainWindow, Ui_MainWindow):  
    def __init__(self): 
     QMainWindow.__init__(self) 

     # Set up the user interface from Designer. 
     self.setupUi(self) 

     #self.db.setDatabaseName('testdb.db') 

     self.model = QSqlTableModel(self) 
     self.model.setTable("records") 

     self.model.setSort(FILEORDER, Qt.AscendingOrder) 

     self.model.setHeaderData(ID, Qt.Horizontal, QVariant("ID")) 
     self.model.setHeaderData(FILEORDER, Qt.Horizontal, QVariant("File Order")) 
     self.model.setHeaderData(RECORDTYPE, Qt.Horizontal, QVariant("Type")) 
     self.model.setHeaderData(NAME, Qt.Horizontal, QVariant("Name")) 
     self.model.setHeaderData(PRESORTNAME, Qt.Horizontal, QVariant("Presort Name")) 
     self.model.setHeaderData(RECORD, Qt.Horizontal, QVariant("Record")) 
     self.model.select() 

     self.tableView.setModel(self.model) 
     #self.view.setSelectionMode(QTableView.SingleSelection) 
     #self.view.setSelectionBehavior(QTableView.SelectRows) 
     self.tableView.setColumnHidden(ID, True) 
     self.tableView.setColumnHidden(PRESORTNAME, True) 
     self.tableView.setColumnHidden(RECORD, True) 


    #slot of the open db action 
    def on_actionOpen_DB_triggered(self, checked=None): 
     if checked is None: return 
     filename = QFileDialog.getOpenFileName(self, 'open a database', 
         '/home/', 
         "Databases (*.db)", #All Files (*.*) 
         "Databases (*.db)") 
     if not filename: 
      pass 

     self.db = QSqlDatabase.addDatabase("QSQLITE") 


     if self.db.isOpen(): 
      sys.stdout.write('db still open?')    

     self.db.setDatabaseName(filename) 
     self.dbname = filename 
     self.db.open() 
     self.model.select() 
     #self.tableView.update() 
     if self.db.isOpen(): 
      sys.stdout.write('db opened') 

回答

2

今天不记得我究竟在何处,我发现它,但正如我在研究别的东西,我发现了一些论坛上发帖称说在建模之前必须进行连接。我怀疑模型构造中必须有一些代码触及db。我改变了我的on_actionOpen_DB_triggered来建立连接后的模型,它工作得很好。