Python QT - 在文本文件中搜索并在TableWidget中显示结果
这件事其实很简单,但我就是做不成。
我有一个文本文件,里面包含了名字、姓氏、邮箱和电话号码,格式是这样的:
name surname phone mail
name surname phone mail
name surname phone mail
每个信息之间用制表符(Tab)隔开,每行的邮箱后面都有一个换行符。
现在我想在这个文件里查找一个特定的名字,然后在我点击“搜索”按钮时,把结果显示在TableWidget里(我用的是Python的Qt库)。
这件事很简单,但我遇到了一些我解决不了的错误。
谢谢大家的帮助。
1 个回答
2
这里有两个步骤可以帮助你完成任务。
- 把数据读入你的模型
- 与表格小部件和搜索框进行交互
为了让你开始,一个简单直接的方法是使用csv模块来读取数据。你也可以创建一个自定义的表格模型,直接从csv文件中读取数据,但我觉得这对我们现在来说有点复杂。
下面是一个简单的方法,可以把你的文本文件转成数据结构:
import csv
people = []
reader = csv.reader(open('people.txt'), delimiter='\t')
for row in reader:
people.append(row)
现在,people这个变量会包含你所有的行,格式是:(名字, 姓氏, 邮箱)
接下来,你可以把这些数据填入你的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)