2014-12-07 61 views
1

我用Tkinter的一些按钮制作了一个简单的窗口。开始时一个按钮处于禁用状态,但是我想在按下另一个按钮后再次变为正常状态。那么如何在代码运行时更改按钮的属性?搅拌器中的材料故障

from tkinter import * 

def com(): 
    print ('activate') 

def win(): 
    window = Tk() 
    window.geometry ('500x500') 
    b1 = Button(text = 'Disabled', pady = '10', padx = '10', state = DISABLED) 
    b1.place(x=100, y=10) 
    b2 = Button(text = 'activate', pady = '10', padx = '10', command=com) 
    b2.place(x=10, y=10) 
    window.mainloop 

win() 
+1

不应该'window.mainloop'是'window.mainloop()'? – 2014-12-07 11:13:15

+1

标题和问题似乎没有关联。 – jonrsharpe 2014-12-07 11:13:16

回答

1

必须使用<buttonname>.config(state=STATE)命令,与状态之一:

  • NORMAL(默认)
  • ACTIVE
  • 禁用

Source我把创造的自由编辑你的代码来测试它,它确实有效,请看下面的内容!

from Tkinter import * 

def com1(): 
    print ('activate') 
    b1.config(state = ACTIVE) 
    b2.config(state = DISABLED) #toggles the buttons 

def com2(): 
    print('de-activate') 
    b1.config(state = DISABLED) 
    b2.config(state = ACTIVE) #toggles the buttons 

def win(): 
    global b1 
    global b2 #This is to allow passing b1 and b2 to com1 and com2, but may not be the most "efficient" way to do this... 
    window = Tk() 
    window.geometry ('500x500') 
    b1 = Button(text = 'Disabled', pady = '10', padx = '10', state = DISABLED, command = com2) #command com2 added here 
    b1.place(x = 100, y = 10) 
    b2 = Button(text = 'activate', pady = '10', padx = '10', command = com1) #com changed to com1 
    b2.place(x = 10, y = 10) 

    window.mainloop() 

win() 
+0

谢谢。我为错误的标题道歉。前一段时间我想问一个关于这个题目的问题,但我自己找到了解决方案,但标题留在那里,我忘了改变它。 – 2014-12-07 14:17:04