如何更改Tkinter中按钮的状态?

时间:2013-09-29 10:29:42

标签: python python-2.7 tkinter

我正在尝试学习Tkinter模块的基础知识,例如制作按钮,复选框和其他基本小部件。我想制作一个带有两个复选框的窗口"音乐"和"视频",以及一个按钮"继续",以便按钮被启用'只有当"音乐"复选框已选中。在搜索关于该主题的更多信息时,我会查看跟踪器,但我无法理解函数callme的以下定义(即在参数中使用*)。 我正在使用ubuntu 12.04并使用python 2.7我输入的代码如下所示。

import tkMessageBox
import Tkinter
top = Tkinter.Tk()
CheckVar1 = Tkinter.IntVar()
CheckVar2 = Tkinter.IntVar()
C1 = Tkinter.Checkbutton(top, text = "Music", variable = CheckVar1, \
         onvalue = 1, offvalue = 0, height=5, \
         width = 20)
C2 = Tkinter.Checkbutton(top, text = "Video", variable = CheckVar2, \
         onvalue = 1, offvalue = 0, height=5, \
         width = 20)
def callme(* args):
   if args[2] == 'w':
   b1['state'] = 'normal'    
def exit():
    pass
b1 = Tkinter.Button(top, text = "Proceed", command = exit)
b1['state'] = 'disabled'
C1.pack()
C2.pack()
b1.pack() 
CheckVar1.trace("w", callme) 
CheckVar2.trace("w", callme)
top.mainloop()

另外,有人可以告诉我如何将更多参数传递给callme函数。

1 个答案:

答案 0 :(得分:1)

callme应如下所示:

def callme(*args):
    if CheckVar1.get() or CheckVar2.get():
        b1['state'] = 'normal'
    else:
        b1['state'] = 'disabled'

如何将更多参数传递给callme函数

使用lambda

def callme(msg, extra1, extra2):
    print msg, extra1, extra2
    if CheckVar1.get() or CheckVar2.get():
        b1['state'] = 'normal'
    else:
        b1['state'] = 'disabled'
...

CheckVar1.trace("w", lambda *args: callme('checkvar1 changed', 'blah', 'blah'))
CheckVar2.trace("w", lambda *args: callme('checkvar2 changed', 'xxx', 'yyy'))