我建立了一个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()
答案 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']