[Tutor] Functions and random buttons

Alan Gauld alan.gauld at freenet.co.uk
Tue Mar 7 10:42:00 CET 2006


> ...I want to make each button clickable

The buttons are clickable so I'm not absolutely sure what you mean?
Do you mean you want to add some action to them when they are clicked?
Thats done with the command option in Tkinter.

define a function and assign it to the button.

In this case it will likely be the same function for all buttons so you 
want to do a wee bit of trickery like:

def func(x,y):    #x,y the button coords
    # do something here

        for i in range(length):
            for j in range(length):
                self.dict['%s%s' % (i, j)] = Button(sel.frame, text = ' 
                                                         command = lambda 
x=i,y=j: func(x,y))

That uses the default values of the lambda function to pass the coords
of the button being pressed to your generic function. func can then use
those coords to address the button in the dictionary to update the label
or appearance etc.

One other wee point:

                self.dict['%s%s' % (i, j)].grid(row = i, column = j)

You don't need to use a string for a key in a dictionary, the tuple will be
just fine so you can replace the string formatting stuff with:

                self.dict[(i, j)].grid(row = i, column = j)


Alan G
Author of the learn to program web tutor

More information about the Tutor mailing list