【发布时间】:2019-08-16 14:52:15
【问题描述】:
我正在尝试根据单选按钮的选择来灰显或禁用复选框。例如,如果我选择 "BRF" 单选按钮,我希望禁用 "BRF" 复选框,但启用所有其他复选框,依此类推...我是对 Tkinter 非常陌生,无法弄清楚为什么我的代码不起作用。
我已经尝试在收音机选择的条件下设置状态,但它似乎没有做任何事情。
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')
button = tk.Button(window, font="Heltavica",text ="PROCEED", command=window.destroy)
button.config(bd=8, font="Ariel", justify="center")
button.pack(side=tk.BOTTOM)
comp = [('BRF','Orange'), ('SHG','Green') ,('THG','Purple'), ('ETA','Blue'), ('MAIN TEC', 'Red')]
power_scan = tk.IntVar()
check1 = tk.Checkbutton(window, text='Get power',
command=power_scan.get, variable = power_scan ,
onvalue=1, offvalue=0)
check1.place(x=400,y=50)
noise_scan = tk.IntVar()
check2 = tk.Checkbutton(window, text='Get noise',
command=noise_scan.get(), variable = noise_scan ,
onvalue=1, offvalue=0)
check2.place(x=400,y=100)
if power_scan.get():
# do something
print("Power scan selected")
if noise_scan.get():
# do something
print("Noise scan selected")
tk.Label(window,
text="""Please select a parameter scan :""",
justify = tk.LEFT,
padx = 20).pack()
def disable_button():
print('disable button')
button.config(state=tk.DISABLED)
def enable_button():
print('enable button')
button.config(state=tk.NORMAL)
def changebutton():
print('changebutton=', var1.get())
if var1.get()==1:
enable_button()
else:
disable_button()
def selected1():
print(var1.get())
def selected2():
print(var2.get())
var1 = tk.StringVar() #used to get the 'value' property of a tkinter.Radiobutton
var2 = tk.IntVar()
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
if selected1() == None:
brfstate='enabled'
shgstate='enabled'
thgstate ='enabled'
etastate='enabled'
maintstate='enabled'
if selected1() == "BRF":
brfstate='disabled'
shgstate='enabled'
thgstate ='enabled'
etastate='enabled'
maintstate='enabled'
elif selected1() == "SHG":
brfstate='enabled'
shgstate='disabled'
thgstate ='enabled'
etastate='enabled'
maintstate='enabled'
elif selected1() == "THG":
brfstate='enabled'
shgstate='enabled'
thgstate ='disabled'
etastate='enabled'
maintstate='enabled'
elif selected1() == "ETA":
brfstate='enabled'
shgstate='enabled'
thgstate ='enabled'
etastate='disabled'
maintstate='enabled'
elif selected1() == "MAIN TEC":
brfstate='enabled'
shgstate='enabled'
thgstate ='enabled'
etastate='enabled'
maintstate='disabled'
brf = ttk.Checkbutton(window, text="BRF", variable=tk.IntVar(), state=brfstate, onvalue=1, offvalue=0)
brf.place(x=300,y=40+15*0*2)
shg = ttk.Checkbutton(window, text="SHG", variable=tk.IntVar(), state=shgstate, onvalue=1, offvalue=0)
shg.place(x=300,y=40+15*1*2)
thg = ttk.Checkbutton(window, text="THG", variable=tk.IntVar(), state=thgstate, onvalue=1, offvalue=0)
thg.place(x=300,y=40+15*2*2)
eta = ttk.Checkbutton(window, text="ETA", variable=tk.IntVar(), state=etastate, onvalue=1, offvalue=0)
eta.place(x=300,y=40+15*3*2)
maint = ttk.Checkbutton(window, text="MAIN TEC", variable=tk.IntVar(), state=maintstate, onvalue=1, offvalue=0)
maint.place(x=300,y=40+15*4*2)
window.mainloop()
我希望当左侧的单选按钮参数被选中时,相等和相反的复选框将被禁用。相反,无论我的单选按钮选择如何,所有复选框都已启用...有人可以帮忙吗?我完全被困住了!
【问题讨论】:
-
当您选择任何 Radiobutton 时,会调用
selected1()函数打印按钮名称,但 Checkboxes 的状态仅在创建复选框时决定一次,因此您需要使用config更改状态selected1()方法中的复选框方法。 -
感谢您的回答 Kamal,您能用一小段代码举例说明您的意思吗?
-
@JordanGallacher:
brf.configure(state = ['disabled']) -
def selected1(): print(var1.get()) if var1.get() == "BRF": print("TRUE") brf.configure(state = ['disabled']) else: print("FALSE") brf.configure(state = ['enabled']) -
我创建了这个定义,但是当我调用它时,我得到:TclError: invalid command name ".!checkbutton3"
标签: python python-3.x checkbox tkinter radio-button