Python-tkinter:将文本绑定到for循环中的checkbutton

时间:2015-08-20 13:54:59

标签: python tkinter

我查看过与我的问题相关的大量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()

0 个答案:

没有答案