Quoting "Jacob S." <[EMAIL PROTECTED]>: > Is there some way that I could loop over those button definitions?
You could try something like this: defArgs = { 'width':4, 'height':3 } # Format: ( label, callback, grid_row, grid_column ) buttons = [ ('0', self.adddigit0, 5, 1), ('1', self.adddigit1, 4, 1), ... ('x', self.multiply, 3, 4), ... ('M+', self.memplus, 1, 1) ] for label, callback, row, col in buttons: Button(self, text=label, command=callback, **defArgs).grid(row=row, column=col) Things to note with this approach: - Functions are first-class objects in python, so you can put them in lists and things. - You can convert between dictionaries and keyword arguments (with some restrictions) by using **. I like to use this as a way setting default arguments for buttons and things. Now, if you want to make your buttons bigger, you only have to change the code in one place. - I'm not "remembering" the buttons as I create them: they are created, immediately gridded, and then forgotton. Tkinter still remembers them, so everything still works. But I can't (easily) get access to them, if I wanted to change the labels or anything. You will have to think about whether this is an issue when you are coding --- but I don't think it is a problem here. Also, rather than defining functions adddigit0, adddigit1, etc, you could instead do: def addDigit(self, digit): self.ctb() self.distext.set(self.distext.get() + str(digit)) and then change your callbacks: buttons = [ ('0', lambda : self.addDigit(0), 5, 1), ('1', lambda : self.addDigit(1), 4, 1), ... ] I remember one of my lecturers saying that if you ever find yourself cutting and pasting when you are coding, there is something you could do better. Hope this helps :-) -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor