繁体   English   中英

Tkinter 单选按钮清除/重置值

[英]Tkinter radio button clear / reset values

我是第一次编写 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

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

如果您需要多个窗口,对于第二个和后续窗口,您应该创建tk.Toplevel一个实例。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM