В вашем коде много неправильных вещей. Например, Principle
наследуется от tk.Tk
, но вы не импортируете Tkinter под именем tk
.
Во-вторых, вам не нужны глобальные переменные. Вместо этого вы должны использовать переменные экземпляра.
В-третьих, поскольку 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 *
может вызвать проблемы, если вы импортируете что-то с именем, которое конфликтует с другим кодом в вашем файле.