如何解决禁用带有复选按钮的小部件?
| 我如何使用复选按钮禁用条目...我知道了但是它不起作用(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()
解决方法
我做了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上运行良好
,您的代码有很多小问题。例如,Principle
是从tk.Tk
继承的,但是您不会以import5ѭ的名称导入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
是一个风格问题。我喜欢后者,因为毫无疑问,哪个模块包含类或常量的名称。如果导入名称与文件中其他代码冲突的内容,则执行ѭ14可能会导致问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。