Heikki
Heikki

Reputation: 351

Tkinter how to lock Text widget by checking checkbox?

I am new to programming and Tkinter. I want to DISABLED textbox when checkbox is pressed and open it NORMAL when box is not ticked. Here is my code:

from tkinter import *

root = Tk()

def lock_fields():
    if check == True:
        data.configure(state=DISABLED)
    if check == False:
        data.configure(state=NORMAL)

check = BooleanVar()
open_for_edit = Checkbutton(root, text="check the box for editing", variable=check, 
                            onvalue=True, offvalue=False, command=lambda: lock_fields())
open_for_edit.pack()
check = check.get()

data = Text(root)
data.insert(END, "I would like to be able to edit this text only when checkbox is checked.")
data.pack()

root.mainloop()

It seems that for some reason the check-variable is always False when it enters to lock_fields function. I tried passing check argument to the method.

Upvotes: 0

Views: 489

Answers (1)

Novel
Novel

Reputation: 13729

You're pretty close, only thing is that the check.get() line must be in the function. Also you don't need the lambda. Try this:

from tkinter import *

root = Tk()

def lock_fields():
    if check.get():
        data.configure(state=DISABLED)
    else:
        data.configure(state=NORMAL)

check = BooleanVar()
open_for_edit = Checkbutton(root, text="check the box for editing", variable=check, onvalue=True, offvalue=False, command=lock_fields)
open_for_edit.pack()

data = Text(root)
data.insert(END, "I would like to be able to edit this text only when checkbox is checked.")
data.pack()

root.mainloop()

Upvotes: 2

Related Questions