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

时间:2012-01-08 16:31:19

标签: python qt

虽然它很简单,但我无法做到。

我有txt文件,其中包含名称,姓氏,邮件和电话号码:

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

所有内容都与标签分开,邮件结束后每行结尾都有换行符

现在我想在文件中搜索特定名称即时搜索,并在单击TableWidget中的按钮搜索时显示结果(使用python Qt)。

它很简单,但我有一些错误我无法解决。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这里有两个可能的步骤。

  1. 将数据读入您的模型
  2. 与您的tablewidget和搜索字段进行互动
  3. 要开始使用,一种简单直接的数据读取方法是使用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)