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()
これは、問題を再現するのが難しい自己完結型の例ではありません。あなたの(抜粋された) 'print'文は' for'ループの中にあるので、あなたが最初のエントリを見て、次に最初のエントリと2番目のエントリなどを見るでしょうか? – Markus
再現性がありません申し訳ありません。はい、出力されたprint文は機能しますが、結果を出力したくないので、Gtk.TextViewに表示して、すべてのレコードを1つのウィンドウに表示します。現時点では、Gtk.TextViewには最初のレコードのみが表示されます。 – Fliss
私の推測: 'records_str'は長い行です(' \ n'のような改行はありません)。 'Gtk.TextView'のデフォルトの振る舞いはテキストをラップするのではなく、すべてのエントリを持ちますが、先頭だけが見えます。 'Gtk.TextView.set_wrap_mode()'を試してみるか、各行に改行を追加してください。 – Markus