Python Tkinter-如何禁用现有按钮

Python Tkinter-如何禁用现有按钮,python,button,tkinter,Python,Button,Tkinter,我正在尝试使用Tkinter禁用按钮: from Tkinter import * import os class OptionWindow: def __init__(self, value): self.master = Tk() self.master.minsize(500,500) self.b1 = Button(self.master, text = "save Game", command =self.sav

我正在尝试使用Tkinter禁用按钮:

from Tkinter import *
import os


class OptionWindow:




    def __init__(self, value):

        self.master = Tk() 
        self.master.minsize(500,500)
        self.b1 = Button(self.master, text = "save Game", command =self.saveGame, state = NORMAL).grid(row = 0, column = 1, sticky = W)

   def saveGame(self):       
        from modules.startingKit import options
        options.saved = True
        self.b1.configure (state = DISABLED)
然而,由于某种原因,当我按下“保存游戏”按钮时,它的外观没有改变。
我必须怎么做才能禁用它?

您犯了一个非常常见的错误,可能是因为互联网上有几个教程犯了同样的错误

在python中,如果执行
x=foo().bar()
x
将给出
bar()
的结果。在代码中,您正在执行self.b=Button(…).grid(…)。因此,
self.b
被设置为
网格(…)
的结果<代码>网格(…)始终返回
None
。因此,执行
self.b.configure(…)
与执行
None.configure(…)
是一样的,这显然不会像您认为的那样

解决方案是在单独的步骤中创建小部件和布局小部件:

self.b1 = Button(...)
self.b1.grid(...)

你犯了一个非常常见的错误,可能是因为互联网上有几个教程犯了同样的错误

在python中,如果执行
x=foo().bar()
x
将给出
bar()
的结果。在代码中,您正在执行self.b=Button(…).grid(…)。因此,
self.b
被设置为
网格(…)
的结果<代码>网格(…)始终返回
None
。因此,执行
self.b.configure(…)
与执行
None.configure(…)
是一样的,这显然不会像您认为的那样

解决方案是在单独的步骤中创建小部件和布局小部件:

self.b1 = Button(...)
self.b1.grid(...)

不确定这是否重要:你启动主循环了吗
self.master.mainloop()
作为
\uuuu init\uu
函数中的最后一项。或者将
Tk()
实例作为参数带到
OptionWindow
的构造函数中,并将其传递给
self.master
。很抱歉,我忽略了这一点。不确定这是否重要:是否启动了主循环
self.master.mainloop()
作为
\uuuu init\uu
函数中的最后一项。或者将
Tk()
实例作为参数带到
OptionWindow
的构造函数中,并将其传递给
self.master
。很抱歉,我忽略了这一点。