禁用带有复选按钮的小部件?

问题描述

| 我如何使用复选按钮禁用条目...我知道了但是它不起作用(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可能会导致问题。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...