2012-01-08 81 views
0

儘管它很簡單,但我無法做到。Python QT - 搜索txt文件並在TableWidget中顯示結果

我有一個包含姓名,電子郵件和電話號碼一樣,txt文件:

name surname phone mail 
name surname phone mail 
name surname phone mail 

一切都是分隔有標籤和郵件後有新行的每一行的末尾

現在我想在搜索文件中搜索特定名稱,並在單擊按鈕在TableWidget中搜索(使用python Qt)時顯示結果。

它很簡單,但我有一些錯誤,我無法解決。

感謝您的幫助。

+1

你到目前爲止嘗試過什麼?將數據存入表模型中有問題嗎?還是你有問題的表格部件本身? – jdi 2012-01-08 16:52:36

+0

第一部分與[此問題]非常相似(http://stackoverflow.com/q/8775447/1052325)。它是功課嗎?提供代碼和錯誤。 – reclosedev 2012-01-08 16:56:46

回答

2

你有兩個可能的步驟在這裏完成。

  1. 將數據讀入模型
  2. 互動與tablewidget和搜索領域

爲了讓您開始,在您的數據讀入一個簡單而直接的方法是使用CSV模塊。你也可以創建一個自定義表模型,它可以直接從csv文件中讀取,但我認爲現在超出了我們的水平。

這裏有一個簡單的辦法讓你的文本文件轉換成一個數據結構:

import csv 

people = [] 
reader = csv.reader(open('people.txt'), delimiter='\t') 
for row in reader: 
    people.append(row) 

現在,人們將包含表格中的所有臺詞:(姓名,電子郵件)

從這裏,你可以填充你的TableWidget。這是一個非常基本的片段,應該給你的想法:

from PyQt4 import QtGui 

rowCount = len(people) 
colCount = max([len(p) for p in people]) 

tableWidget = QtGui.QTableWidget() 
tableWidget.setRowCount(rowCount) 
tableWidget.setColumnCount(colCount) 

for row, person in enumerate(people): 
    for column, value in enumerate(person): 
     newItem = QtGui.QTableWidgetItem(value) 
     tableWidget.setItem(row, column, newItem) 

的colCount是如果你有不平衡量,每行的字段只是一個小的保護。這又是一個普遍的方法。

從這裏可以看出它對於如何進行搜索有點開放。但是你可以做的是將搜索按鈕連接到處理搜索的方法。請記住,我將這些全部寫入全局函數中。你可能會有你的班級,並且隨處可以使用self。但我保持簡短:

myButton.clicked.connect(search) 

def search(*args, **kwargs): 
    value = myLineEdit.text() 
    items = tableWidget.findItems(value, QtCore.Qt.MatchContains) 
    if items: 
     # scroll to the first match? 
     tableWidget.scrollToItem(items[0], tableWidget.PositionAtCenter) 
+0

問題解決了我會說。 Jdi,很好的工作。 – JohnDoeTheOne 2012-01-08 23:04:02