使用条件

时间:2016-09-13 00:55:20

标签: python checkbox tkinter

在我的代码中,我试图在没有选中时禁用hi框,并在选中yes时启用它。我尝试在更改的功能中执行此操作。然而,当运行代码并检查是的框时,你好仍然没问题,当检查是的时,我只得到是:

Tkinter回调中的异常 Traceback(最近一次调用最后一次):   文件“C:\ Users \ Ahmed \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ idlelib \ run.py”,第119行,主要     seq,request = rpc.request_queue.get(block = True,timeout = 0.05)   文件“C:\ Users \ Ahmed \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ queue.py”,第172行,获取     提高空 queue.Empty

在处理上述异常期间,发生了另一个异常:

追踪(最近一次通话):   文件“C:\ Users \ Ahmed \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ tkinter__init __。py”,第1550行,调用     return self.func(* args)   文件“C:\ Users \ Ahmed \ Desktop \ no_yes.py”,第13行,已更改     c3.config(状态= ENABLE) NameError:名称'ENABLE'未定义

可能是我使用空闲而不是导入正确的东西(我没有修改或安装闲置只是普通来自python网站)但我想它的方式我尝试启用或禁用更改功能中的复选框。基本上我想知道如何在满足正确要求时启用和禁用复选框(如果没有选中则禁用,如果仅选择是则启用。)

#Import tkinter to make gui
from tkinter import *
from tkinter import ttk

def changed(*args):
    value = b1.get()
    value2 = b2.get()
    value3 = b3.get()
    print (b3.get()=="1")
    if b1.get()==1:
        c3.config(state=DISABLED)
    elif b2.get() == "1" and (b1.get() == "1") == False:
        c3.config(state=ENABLE)
    elif b3.get() != "1":
        result.set("")
    elif b3.get() == "1":
        result.set("Hi!")
#Sets title and creates gui
root = Tk()
root.title("Form")

#Configures column and row settings and sets padding
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

b1 = StringVar()
c1 = ttk.Checkbutton(mainframe, text='No', 
        command=changed, variable=b1)
c1.grid(column=1, row=1, sticky=(W, E))

b2 = StringVar()
c2 = ttk.Checkbutton(mainframe, text='Yes', 
        command=changed, variable=b2)
c2.grid(column=2, row=1, sticky=(W, E))

b3 = StringVar()
c3 = ttk.Checkbutton(mainframe, text='Hi', 
        command=changed, variable=b3)
c3.grid(column=2, row=2, sticky=(W, E))

result = StringVar()
ttk.Label(mainframe, textvariable=result).grid(column=1, row=2, sticky=(W))

1 个答案:

答案 0 :(得分:0)

好的,所以禁用和启用就像这样:

button.state(['disabled'])            # set the disabled flag, disabling the button
button.state(['!disabled'])           # clear the disabled flag
button.instate(['disabled'])          # return true if the button is disabled, else false
button.instate(['!disabled'])         # return true if the button is not disabled, else false
button.instate(['!disabled'], cmd)    # execute 'cmd' if the button is not disabled