我查看过与我的问题相关的大量stackoverflow问题但无法在任何地方找到解决方案。我对(Bio)Python很陌生,所以也许这个问题在我忽略的地方有一个明显的答案。
问题:当用户悬停一个按钮时,我想显示一段文字。我在字典上使用for循环创建了checkbuttons。但是,可以理解的是,当我将检查按钮悬停在我的窗口小部件中时,只保留并显示最后一个窗口小部件的文本,因为该变量具有该值,在循环结束时。因此,对于所有检查按钮,显示相同的文本,这不是意图。
我想要做的是:使用Biopython我想制作一个脚本来检查Pubmed中针对某个关键字的新科学出版物。小部件显示过去一周的标题(在这种情况下为帕金森病)。当我悬停标题时,我想显示摘要。 在此之后,我将下载由checkbuttons标记的文章(意思是我认为这些文章很有趣)。
我能够使用字典和IntVar()获取检查按钮的输出(通过浏览stackoverflow找到解决方案)。但是,我如何确保每个支票按钮保留其自己的绑定文本?
提前致谢!
我的代码:
from Bio import Entrez
Entrez.email = "myemailadres"
from Bio import Medline
from Tkinter import *
def query_checkbuttons(articledict):
for key, value in articledict.items():
state = value[2].get()
if state != 0:
print(key)
def checkpubmed(searchterm):
articlebutton.destroy()
welcome.destroy()
handle = Entrez.esearch(db="pubmed", term=searchterm, retmax=10, reldate=7)
idlist = Entrez.read(handle)["IdList"]
handle = Entrez.efetch("pubmed", id=idlist, rettype="medline", retmode="text")
records = Medline.parse(handle)
articledict = {}
for record in records:
try:
articledict[record["PMID"]] = [record['TI'], record['AB'], 0]
except KeyError:
articledict[record["PMID"]] = [record['TI'], "Abstract not available", 0]
titleframe = Frame(mainframe).pack(side=BOTTOM)
abstractcontent = Label(mainframe, text="Hover over a title to get abstract information")
abstractcontent.pack(side=BOTTOM, anchor=W)
for key in articledict:
articledict[key][2] = IntVar()
c = Checkbutton(titleframe, text=articledict[key][0], variable=articledict[key][2])
c.bind("<Enter>", lambda event: abstractcontent.configure(text=articledict[key][1]))
c.bind("<Leave>", lambda event: abstractcontent.configure(text=""))
c.pack(anchor=W)
handle.close()
print articledict[key][1]
confirm = Button(mainframe, text="Click to confirm selection", command=lambda: query_checkbuttons(articledict))
confirm.pack(side=BOTTOM)
root = Tk()
mainframe = Frame(root)
mainframe.pack(anchor=W)
welcome = Label(mainframe, text="Are you ready to view the articles of the past week?")
welcome.pack(side=TOP)
articlebutton = Button(mainframe, text="Press for new articles", command=lambda: checkpubmed("Parkinson"))
articlebutton.pack(side=LEFT)
exitbutton = Button(mainframe, text="Press to exit", command=mainframe.quit)
exitbutton.pack(side=TOP, anchor=W)
root.mainloop()
root.destroy()