0

我第一次编写 Tkinter 程序并且对单选按钮有疑问。我想做的是:

  1. 打开一组图像(一次一个)。
  2. 打开图像时,使用单选按钮注释值。
  3. 在列表中收集此值

因此,在此示例中,我有 2 个化合物,列表将有 2 个注释。

我遇到的问题是,如果用户错误地单击单选按钮 2 而不是一个,然后自己更正,则列表将有 4 个项目(第一个图像为 3 个,第二个图像为 1 个)。我该如何处理,以便列表只有 2 个值?

import Tkinter as tk
from PIL import ImageTk, Image
from tkFileDialog import askopenfilename

cmp_list = ["VU435DR","VU684DR"]

li = []
li_final = []

def sel():
    selection = str(var.get())

    if selection == "1":
        li.append("Antagonist")
    elif selection == "2":        
        li.append("Agonist")

for i in range(len(cmp_list)):
    root = tk.Tk()
    var = tk.IntVar()
    ig = str(cmp_list[i] + '.png')
    img = ImageTk.PhotoImage(Image.open(ig))
    panel = tk.Label(root,image=img)
    panel.pack(side = "top",fill="none",expand="no")
    #w = tk.Text(height=2,width=50)
    #w.pack(side='right")

    q = tk.Radiobutton(root,text="Antagonist",command=sel,value=1,variable=var)
    q.pack()

    r = tk.Radiobutton(root,text="Agonist",command=sel,value=2,variable=var)
    r.pack()
    root.mainloop()

print li
4

1 回答 1

0

您的代码正在创建多个tk.Tk(). 这不是 Tkinter 设计的工作方式,它会产生不可预测的行为。一个合适的 Tkinter 程序总是只有一个tk.Tk().

如果您需要多个窗口,则应为第二个和后续窗口创建一个tk.Toplevel.

要回答您关于如何处理某人先点击一个单选按钮然后再点击另一个的具体问题 - 问题是您每次点击单选按钮时都会无条件地附加到您的列表中。解决方案是使用某种标志或指示器来了解是否单击了某个单选按钮,或者更改代码以使其无关紧要。

让我们看看第二个选项——让它变得无关紧要。当您打开一个新图像时,您可以自动将一个值附加到您的列表中。在这种情况下,将其设置None为表示尚未选择任何内容。然后,在 中sel,您将始终替换最后一个元素,而不是追加一个新元素,因为您知道最后一个元素始终引用当前化合物。

于 2013-04-29T17:49:59.190 回答