在销毁窗口时获取所有单选按钮和复选框的最终状态

时间:2019-03-27 06:30:15

标签: python python-3.x tkinter

我建立了一个GUI,要求输入一些用户信息。我正在努力获取按下“继续”按钮之前所有单选按钮和复选按钮的最终状态(这也会破坏窗口)。有人知道如何将这些值写到变量矩阵中,以便在窗口被破坏后可以正常工作?

我尝试创建一个变量:final = [var.get(),var1.get(),var2.get(),get_noise_scan(),get_power_scan()],以便在销毁窗口之前获取值但这不起作用。

import tkinter as tk
from tkinter import ttk 


window = tk.Tk()
window.configure(background='white')
window.geometry("500x600") # This sets the Window size to work with
window.title('Please select scan options')


comp = [('BRF','Orange'), ('SHG','Green') ,('THG','Purple'), ('ETA','Blue'), ('MAIN TEC', 'Red')]

def get_noise_scan():
    n = noise_scan.get()
    print(n)
    return n

def get_power_scan():
    p = power_scan.get()
    print(p)
    return p

############
power_scan = tk.StringVar()
check1 = tk.Checkbutton(window, text='Get power', 
        command=get_power_scan, variable = power_scan ,
        onvalue="Yes", offvalue="No")

check1.place(x=400,y=50)
check1.deselect()
#############
noise_scan = tk.StringVar()
check2 = tk.Checkbutton(window, text='Get noise', 
        command=get_noise_scan, variable = noise_scan ,
        onvalue="Yes", offvalue="No")

check2.place(x=400,y=100)
check2.deselect()

if power_scan.get() == "Yes" :
    # do something
    print("Power scan selected")
if noise_scan.get() == "Yes" :
    # do something
    print("Noise scan selected")

tk.Label(window, 
        text="""Please select a parameter scan :""",
        justify = tk.LEFT,
        padx = 20).pack()



var = tk.StringVar()


def get_single():
    s = var.get()
    print(s)
    if var.get() == "single":
        brf.config(state=tk.DISABLED)
        #brf.deselect()  
        shg.config(state=tk.DISABLED)
        #shg.deselect() 
        thg.config(state=tk.DISABLED)
        #thg.deselect()
        eta.config(state=tk.DISABLED)
        #eta.deselect()
        maint.config(state=tk.DISABLED)
        #maint.deselect
    return str(s)

def get_double():
    d = var.get()
    print(d)
    if var.get() == "double":
        brf.config(state=tk.NORMAL)
        shg.config(state=tk.NORMAL)
        thg.config(state=tk.NORMAL)
        eta.config(state=tk.NORMAL)
        maint.config(state=tk.NORMAL)
    return str(d)

button2 = tk.Radiobutton(window, variable=var, font="Heltavica",text ="SINGLE", value='single', command=get_single)
button2.config(bd=8, indicatoron=0, font="Ariel", justify="center")
button2.pack(side=tk.LEFT)

button3 = tk.Radiobutton(window, variable=var, font="Heltavica",text ="DOUBLE", value='double', command=get_double)
button3.config(bd=8, indicatoron=0, font="Ariel", justify="center")
button3.pack(side=tk.RIGHT)



#instance.cget("option") 


#def selected2():
#    print(var2.get())


var1 = tk.StringVar() #used to get the 'value' property of a tkinter.Radiobutton
var2 = tk.StringVar()



def selected1():
    if var.get() == "single":
        print(var1.get())
    elif var.get() == "double":
        print(var1.get(), var2.get())

    if var1.get() == "BRF" or var.get() == "single":
        brf.config(state=tk.DISABLED)

    elif var1.get() == "SHG" or var1.get() == "THG" or var1.get() == "ETA" or var1.get() == "MAIN TEC":    
        brf.config(state=tk.ACTIVE)

    if var1.get() == "SHG" or var.get() == "single":
        shg.config(state=tk.DISABLED)

    elif var1.get() == "BRF" or var1.get() == "THG" or var1.get() == "ETA" or var1.get() == "MAIN TEC":    
        shg.config(state=tk.ACTIVE)

    if var1.get() == "THG" or var.get() == "single":
        thg.config(state=tk.DISABLED)

    elif var1.get() == "BRF" or var1.get() == "SHG" or var1.get() == "ETA" or var1.get() == "MAIN TEC":    
        thg.config(state=tk.ACTIVE)

    if var1.get() == "ETA" or var.get() == "single":
        eta.config(state=tk.DISABLED)

    elif var1.get() == "BRF" or var1.get() == "SHG" or var1.get() == "THG" or var1.get() == "MAIN TEC":    
        eta.config(state=tk.ACTIVE)

    if var1.get() == "MAIN TEC" or var.get() == "single":
        maint.config(state=tk.DISABLED)

    elif var1.get() == "BRF" or var1.get() == "SHG" or var1.get() == "THG" or var1.get() == "ETA":    
        maint.config(state=tk.ACTIVE)    


    #return var1.get(),var2.get()



components = [("BRF", "BRF"),
              ("SHG", "SHG"),
              ("THG", "THG"),
              ("ETA", "ETA"),
              ("MAIN TEC", "MAIN TEC")
              ]


count = 0
for text, mode in components :
        a = tk.Radiobutton(window, text=text,
                        variable=var1, value=mode, command = selected1, indicatoron = 0)

        a.place(x=130,y=40+15*count*2)

        count += 1       


brf = ttk.Radiobutton(window, text="BRF", variable=var2, value = components[0][1], command = selected1)#, onvalue=1, offvalue=0)
brf.place(x=300,y=40+15*0*2)

shg = ttk.Radiobutton(window, text="SHG", variable=var2, value = components[1][1] ,command = selected1)#, onvalue=1, offvalue=0)
shg.place(x=300,y=40+15*1*2)        

thg = ttk.Radiobutton(window, text="THG", variable=var2, value = components[2][1] ,command = selected1)#, onvalue=1, offvalue=0)
thg.place(x=300,y=40+15*2*2)

eta = ttk.Radiobutton(window, text="ETA", variable=var2, value = components[3][1] ,command = selected1)#, onvalue=1, offvalue=0)
eta.place(x=300,y=40+15*3*2)  

maint = ttk.Radiobutton(window, text="MAIN TEC", variable=var2, value = components[4][1] ,command = selected1)#, onvalue=1, offvalue=0)
maint.place(x=300,y=40+15*4*2) 


def get_scan():
    print(var.get(),var1.get(),var2.get(),get_noise_scan(),get_power_scan())
    final = [var.get(),var1.get(),var2.get(),get_noise_scan(),get_power_scan()]
    window.destroy()
    return final

button = tk.Button(window, font="Heltavica",text ="PROCEED", command=get_scan)
button.config(bd=8, font="Ariel", justify="center")
button.pack(side=tk.BOTTOM)

window.mainloop()


1 个答案:

答案 0 :(得分:0)

最简单的方法是为列表global声明final

...

def get_scan():
    global final
    print(var.get(),var1.get(),var2.get(),get_noise_scan(),get_power_scan())
    final = [var.get(),var1.get(),var2.get(),get_noise_scan(),get_power_scan()]
    window.destroy()

...

window.mainloop()

print (final)

结果:

['', '', 'ETA', 'No', 'No']