Python QT - 在文本文件中搜索并在TableWidget中显示结果

0 投票
1 回答
1929 浏览
提问于 2025-04-17 09:48

这件事其实很简单,但我就是做不成。

我有一个文本文件,里面包含了名字、姓氏、邮箱和电话号码,格式是这样的:

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

每个信息之间用制表符(Tab)隔开,每行的邮箱后面都有一个换行符。

现在我想在这个文件里查找一个特定的名字,然后在我点击“搜索”按钮时,把结果显示在TableWidget里(我用的是Python的Qt库)。

这件事很简单,但我遇到了一些我解决不了的错误。

谢谢大家的帮助。

1 个回答

2

这里有两个步骤可以帮助你完成任务。

  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)

撰写回答