如何使用checkbutton禁用一个条目...我得到了这个但它不起作用(python 2.7.1)......
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
from Tkinter import *
root = Tk()
class Principal(tk.Tk):
def __init__(self, *args, **kwargs):
foo = ""
nac = ""
global ck1
nac = IntVar()
ck1 = Checkbutton(root, text='Test',variable=nac, command=self.naccheck)
ck1.pack()
global ent
ent = Entry(root, width = 20, background = 'white', textvariable = foo, state = DISABLED)
ent.pack()
def naccheck(self):
if nac == 1:
ent.configure(state='disabled')
else:
ent.configure(state='normal')
app=Principal()
root.mainloop()
答案 0 :(得分:3)
您的代码有很多小问题。例如,Principle
继承自tk.Tk
,但您不会以名称tk
导入Tkinter。
其次,您不需要全局变量。您应该使用实例变量。
第三,由于“nac”是IntVar
,您需要使用get
方法来获取值。
最后,您使用foo
作为textvariable
属性的值,但您使用的是普通值。它需要是一个Tk变量(例如:StringVar
)
以下是修改了这些内容的代码版本:
#!/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()
顺便说一下,无论你做from Tkinter import *
还是import Tkinter as tk
都是一种风格问题。我喜欢后者,因为它毫无疑问地保留了哪个模块包含类或常量的名称。如果导入名称与文件中的其他代码冲突的内容,则执行import *
会导致问题。
答案 1 :(得分:2)
我创建了Principal类的foo和nac成员变量
...
self.foo = StringVar()
self.foo.set("test")
self.nac = IntVar()
...
然后在naccheck()中引用self.nac
def naccheck(self):
if self.nac == 1:
ent.configure(state='disabled')
self.nac = 0
else:
ent.configure(state='normal')
self.nac = 1
别忘了改变ck1的变量= self.nac 和ent的textvariable = self.foo。
此外,您可能想要生成ck1和ent成员变量,因为稍后使用naccheck()
引用它们时可能会遇到问题这些更改在我的Python2.7上运行良好