2014-05-07 53 views
2

我試圖在PyQt應用程序中顯示NTFS卷的主文件表格。我已經提取了MFT並將其轉換爲csv文件,現在我希望使用PyQt Table View以表格形式顯示數據。該程序運行完美無誤,但什麼都不顯示。在PyQt表格視圖中顯示一個大的csv文件

CSV文件的大小爲300 Mb。

現在這是我的代碼如下所示:

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(640, 480) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) 
     self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) 
     self.tableView = QtGui.QTableView(self.centralwidget) 
     self.tableView.setObjectName(_fromUtf8("tableView")) 
     self.verticalLayout.addWidget(self.tableView) 
     MainWindow.setCentralWidget(self.centralwidget) 

     self.actionOpen = QtGui.QAction(MainWindow) 
     icon = QtGui.QIcon() 
     icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/open.jpg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) 
     self.actionOpen.setIcon(icon) 
     self.actionOpen.setObjectName(_fromUtf8("actionOpen")) 


     self.retranslateUi(MainWindow) 
     QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL(_fromUtf8("triggered(bool)")), MainWindow.close) 
     QtCore.QObject.connect(self.actionOpen, QtCore.SIGNAL("triggered()"),self.ExtractMFT) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 
     self.actionOpen.setText(QtGui.QApplication.translate("MainWindow", "Open", None, QtGui.QApplication.UnicodeUTF8)) 


    def ExtractMFT(self, root = None): 
     if root == None: 
      root = "\\\\.\C:" 

     FileName = "MFT-EXtracted" 
     CSVName = "MFT-EXtracted.csv" 
     print 1 
     Control=subprocess.Popen(["icat",root,"0-128-1",">",FileName],shell =True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) 
     Control.wait() 
     print 2 
     print Control.stdout.read() 
     if Control.stderr == None: 
      print 3 
      #Control=subprocess.Popen(["python","analyzeMFT.py","-f",FileName,"-o",CSVName],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) 
      #Control.wait() 
      print 5 
      print Control.stdout.read() 
      if Control.stderr == None: 
       self.loadCsv(CSVName) 


    def loadCsv(self, fileName): 
     # The problem persist in this function. The items being appended to the 
     # model are not being displayed by the tableView , infact the tableView 
     # is empty nothing come's up. 
     header = False 
     header_data=[] 
     data=[] 
     print 6 
     se2 = 0 
     model = QtGui.QStandardItemModel() 
     with open(fileName, "rb") as fileInput: 
      for row in csv.reader(fileInput): 
       if header == True: 
        items = [ 
        QtGui.QStandardItem(field) 
        for field in row 
       ] 
        model.appendRow(items) 
       elif header ==False: 
        for field in row: 
         items = [ 
         field 
         for field in row 
         ] 
         header_data.append(items) 
        header == True 

      print 7 
      self.tableView.setModel(model) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() # <-- Instantiate QMainWindow object. 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    app.exec_() 



main() 

,我打算加載CSV文件中有超過30萬行,所以是他們將數據加載到視圖的有效途徑。這樣可以減少系統資源的使用。

+0

http://www.sscce.org/ – M4rtini

+0

你可以縮小這個問題嗎,還是應該爲你調試?通過明智地使用打印語句,你可以告訴我們代碼*應該做些什麼,但不是。 – Schollii

+0

@Schollii:我編輯了代碼並刪除了不相關的代碼。 – TheCreator232

回答

3

很可能你只想加載用戶可以看到的文件部分(在兩邊加上一點點,這樣你可以確定何時加載更多)。您應該能夠應用Big Tables page中討論的技術。您可以通過谷歌找到其他類似的教程或討論。

+0

鏈接已損壞... –

+0

@rene看起來像qt文檔已經移動。我已更新鏈接。 – Schollii

+0

謝謝@schollii快速回復!乾杯 –

相關問題