<p>你的代码有很多小问题。首先,<code>Principle</code>从<code>tk.Tk</code>继承,但不以<code>tk</code>名称导入Tkinter。</p>
<p>其次,不需要全局变量。您应该改用实例变量。</p>
<p>第三,因为“nac”是一个<code>IntVar</code>,所以需要使用<code>get</code>方法来获取值。</p>
<p>最后,使用<code>foo</code>作为<code>textvariable</code>属性的值,但使用的是普通值。它需要是一个Tk变量(例如:<code>StringVar</code>)</p>
<p>下面是您的代码的一个版本,其中修复了这些问题:</p>
<pre><code>#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
import Tkinter as tk
root = tk.Tk()
class Principal(tk.Tk):
def __init__(self, *args, **kwargs):
self.foo = tk.StringVar()
self.nac = tk.IntVar()
ck1 = tk.Checkbutton(root, text='Test',variable=self.nac, command=self.naccheck)
ck1.pack()
self.ent = tk.Entry(root, width = 20, background = 'white',
textvariable = self.foo, state = tk.DISABLED)
self.ent.pack()
def naccheck(self):
if self.nac.get() == 1:
self.ent.configure(state='disabled')
else:
self.ent.configure(state='normal')
app=Principal()
root.mainloop()
</code></pre>
<p>顺便说一下,你是<code>from Tkinter import *</code>还是<code>import Tkinter as tk</code>是一个风格问题。我喜欢后者,因为毫无疑问哪个模块包含类或常量的名称。如果导入的名称与文件中的其他代码冲突,则执行<code>import *</code>可能会导致问题。</p>