【问题标题】:Python QT - Search the txt file and show the results in TableWidgetPython QT - 搜索 txt 文件并在 TableWidget 中显示结果
【发布时间】:2012-02-05 10:36:10
【问题描述】:

虽然很简单,但我做不到。

我有一个 txt 文件,其中包含这样的姓名、姓氏、邮件和电话号码:

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

所有内容都用制表符分隔,邮件后每行末尾都有换行符

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

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

感谢您的帮助。

【问题讨论】:

  • 到目前为止您尝试过什么?您在将数据导入表模型时遇到问题吗?还是您对表格小部件本身有问题?
  • 第一部分与this question 非常相似。是功课吗。。提供代码和错误。

标签: python qt


【解决方案1】:

您可以在这里完成两个可能的步骤。

  1. 将数据读入您的模型
  2. 与您的表格小部件和搜索字段交互

首先,读取数据的一种简单直接的方法是使用 csv 模块。您还可以创建一个直接从 csv 文件读取的自定义表模型,但我认为这超出了我们现在的水平。

这是将文本文件转换为数据结构的简单方法:

import csv

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

现在人们将在表单中包含您的所有行:(姓名,姓氏,电子邮件)

从这里,您可以填充您的 TableWidget。这是一个非常基本的 sn-p,应该会给你这个想法:

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)

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多