2012-01-08 13 views
0

それは可能ですがシンプルですが、それはできません。Python QT - txtファイルを検索し、TableWidgetで結果を表示します

私はそのような名前、姓、メール及び電話番号を含むファイルtxtをしている:すべてはタブで区切られ、メールの後に改行が各ライン

の最後にあり

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

を今私は検索特定の名前のファイルを検索し、私は(PythonのQtを使用して)TableWidgetのボタンの検索をクリックして結果を表示したいと思います。

シンプルですが、私は解決できないエラーがあります。

ありがとうございました。

+1

これまでに何を試しましたか?テーブルモデルにデータを渡す際に問題がありますか?または、テーブルウィジェット自体に問題がありますか? – jdi

+0

最初の部分は[この質問](http://stackoverflow.com/q/8775447/1052325)と非常によく似ています。宿題ですか?コードとエラーを提供する – reclosedev

答えて

2

ここでは2つのステップを実行できます。

  1. モデルにあなたを始めるためにあなたの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

関連する問題