Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[py3] Tkinter menu checkbutton not working

77 views
Skip to first unread message

Dodo

unread,
Jun 9, 2010, 12:26:17 PM6/9/10
to
Hello,

I trying to make this piece of code work (this is python3)

from tkinter import *
from tkinter.ttk import *

class Window:
def __init__(self):
self.root = Tk()

self.menu = Menu(self.root)
self.root['menu'] = self.menu

self.submenu = Menu(self.menu)
self.ck = 0
self.submenu.add_checkbutton(label="My checkbutton",
variable=self.ck, command=self.displayCK)
self.menu.add_cascade(label="sub", menu=self.submenu )

def displayCK(self):
print( self.ck )


app = Window()
app.root.mainloop()


The self.ck will always be 0... why?

Dorian

Message has been deleted

Terry Reedy

unread,
Jun 9, 2010, 12:55:28 PM6/9/10
to pytho...@python.org

You never change it ;-)
Passing the *value* 0 to the widget has no effect on the binding of
self.ck. You need to pass a container whose contents the widget can
modify == specifically an IntVar. See 24.1.6.4. Coupling Widget Variables.

Terry Jan Reedy


Message has been deleted

Dodo

unread,
Jun 9, 2010, 1:20:46 PM6/9/10
to
Le 09/06/2010 18:54, rantingrick a �crit :
> see my recent post on your last question. The way you are writing
> these classes is wrong. Always inherit from something, in this case
> Tk. Fix that first and then pretty up this GUI. But to answer your
> question "self.ck" needs to be an instance of tk.IntVar. Read more
> about it here...
>
> http://infohost.nmt.edu/tcc/help/pubs/tkinter/checkbutton.html

I already tried with self.ck = IntVar()
and now it displays PY_VAR0

FYI, I'm using Thunderbird 3, which appears to have some bugs with
indentation (according to Alf P. Steinbach). That's why I replaced \t by
a single space

Message has been deleted

Dodo

unread,
Jun 12, 2010, 4:39:14 PM6/12/10
to
Le 09/06/2010 20:37, rantingrick a �crit :
> IntVar is a class and self.ck is an instance of that class which is a
> PY_VAR. Try print(dir(self.ck)) in your callback to see what methods
> are available to this instance. Im just speculating here but somehow
> there must be a way to "get" and "set" the IntVar's value... hmmm?
>
> You're about to kick yourself when you realize it. ;-)

thanks I realised it eventually

0 new messages