2016-09-11 21 views
0

Biopythonを使ってPubmedを検索したい(コードはBiopythonのドキュメントにあります)、Gtk.TextViewの各レコードの結果(タイトル、著者、ソース)を表示します。コードは印刷されたときに機能しますが、TextViewを使用しようとすると、最初のレコードのみが表示されます。なぜそうなのか分かっている人は、助けていただければ幸いです。あなたのforループは、改行せずに一つの長い行を生成し、Gtk.TextViewは、行をラップしない:ここではGtk.TextViewでBiopython Pubmed検索の結果を表示するには?

は私のコメントに書かれたとおり、私は今のところ...

def pbmd_search(self): #searches pubmed database, using Biopython documentation 
    handle = Entrez.egquery(term=self.entry.get_text()) 
    record = Entrez.read(handle) 
    for row in record["eGQueryResult"]: 
     if row["DbName"]=="pubmed": 
      print(row["Count"]) 

    handle = Entrez.esearch(db="pubmed", term=self.entry.get_text(), retmax=1000) 
    record = Entrez.read(handle) 
    idlist = record["IdList"] 

    handle = Entrez.efetch(db="pubmed", id=idlist, rettype="medline", retmode="text") 
    records = Medline.parse(handle) 
    records = list(records) 

    records_str = "" 
    tv = Gtk.TextView() 
    for record in records: 
     records_str +=("title:", record.get("TI", "?"), "authors:", record.get("AU", "?"), "source:", record.get("SO", "?"), ("")) 
     #print(records_str) 

    tv.get_buffer().set_text(str(records_str)) 
    tv.set_editable(False)   
    sw = Gtk.ScrolledWindow() 
    sw.set_size_request(300,200) 
    sw.add(tv) 
    w = Gtk.Window()                                      w.add(sw) 
    w.show_all() 
+0

これは、問題を再現するのが難しい自己完結型の例ではありません。あなたの(抜粋された) 'print'文は' for'ループの中にあるので、あなたが最初のエントリを見て、次に最初のエントリと2番目のエントリなどを見るでしょうか? – Markus

+0

再現性がありません申し訳ありません。はい、出力されたprint文は機能しますが、結果を出力したくないので、Gtk.TextViewに表示して、すべてのレコードを1つのウィンドウに表示します。現時点では、Gtk.TextViewには最初のレコードのみが表示されます。 – Fliss

+0

私の推測: 'records_str'は長い行です(' \ n'のような改行はありません)。 'Gtk.TextView'のデフォルトの振る舞いはテキストをラップするのではなく、すべてのエントリを持ちますが、先頭だけが見えます。 'Gtk.TextView.set_wrap_mode()'を試してみるか、各行に改行を追加してください。 – Markus

答えて

1

を持っているものです。 Python GTK+ 3 tutorialから

Gtk.TextViewウィジェットの別のデフォルト設定は、ブレークが入力されるまで水平に続けるテキストの長い行です。テキストをラップして、画面の端から出ないようにするには、Gtk.TextView.set_wrap_mode()を呼び出します。

出力文字列に改行を追加するか、Gtk.TextView.set_wrap_mode()を使用する必要があります。

関連する問題