我試圖在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萬行,所以是他們將數據加載到視圖的有效途徑。這樣可以減少系統資源的使用。
http://www.sscce.org/ – M4rtini
你可以縮小這個問題嗎,還是應該爲你調試?通過明智地使用打印語句,你可以告訴我們代碼*應該做些什麼,但不是。 – Schollii
@Schollii:我編輯了代碼並刪除了不相關的代碼。 – TheCreator232