2017-08-15 18 views
0

コンボボックスtabSelectionで表示するsqliteからテーブル名を選択するときに、Combobox dbSelectionがコードに適用されるように更新されません。初期選択後にPyQt4コンボボックスが更新されない

ボタンをクリックすると、ディレクトリダイアログウィンドウをロードするのにかなりの時間がかかります。

また、データベース内のすべてのテーブルがtabSelectionコンボボックスにリストされていることを確認したいと思います。

コードは次のとおりであるとQt Designerのファイルに関連付けられている:

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 
import qcDbWidget2 
import os 
import sqlite3 

class MainDialog(QWidget, qcDbWidget2.Ui_qcQueryWidget): 
    def __init__(self, parent=None): 
     super(MainDialog, self).__init__(parent) 
     self.setupUi(self) 
     self.connect(self.dbDirSelect, SIGNAL("clicked()"), self.getDirName) 

    def getDirName(self): 
     existDir = QFileDialog.getExistingDirectory(self) 
     dbDir = str(existDir) 
     self.dbDirDisplay.setText(dbDir) 

     dbFileList = [] 
     for root, dirs, files in os.walk(dbDir): 
      for file in files: 
       if file.endswith('.db'): 
        dbFileList.append(file) 

     self.dbSelection.addItems(dbFileList) 

     tableList = [] 
     self.dbSelection.update() 

     dbName = str(self.dbSelection.currentText()) 
     dbPath = str(dbDir + '\\' + dbName) 
     conn = sqlite3.connect(dbPath) 
     c = conn.cursor() 

     res = c.execute("SELECT name FROM sqlite_master WHERE type='table';") 
     self.tabSelection.clear() 
     for name in res: 
      tableList.append(name[0]) 
      print(name[0]) 
     for name in tableList: 
      self.tabSelection.addItems(tableList) 

app = QApplication(sys.argv) 
form = MainDialog() 
form.show() 
app.exec_() 
+2

あなたはQSqlTableModelとQTableViewを使用している場合、それはSQL要求を記述しなくても自動的にロードされます例えば、私はQtSqlモジュールを使用することをお勧めpyqt4を使用している場合。 – eyllanesc

答えて

1

あなたがQTableView代わりのQTableListを使用することを検討していますか?
QtはMVCを使用していますが、手動で行うよりも高速です。

この場合、かなり簡単です。あなたはそれがモデルを提供するための方法setModel()だ使い、

my_list = ["toto", "tutu", "tata"] 
my_model.setStringList(my_list) 

あなたはQTableViewを持っていたら:あなたが、その後my_modelにデータを保存することができます

my_model = QStringListModel() 


あなたがモデルを作成します。

my_table_view.setModel(my_model) 
+0

sqliteデータベースからテーブルのリストを作成しようとしていました。 – RGETLB

+0

はい、私はそう思いました。その場合は、スニペットで 'my_list'の値をsqlite dbのテーブルのリストに変更してください。私は何か見落としてますか? – peyo

+0

ありがとうございます。私はこれを撃つだろう。私はビューを作ることに目を向けなければならない。 – RGETLB

関連する問題