2012-01-08 94 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