So I am practicing using Tkinter with python, and I am just trying to learn the basics. My code right now is
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.prompt = tk.Label(self, text="Press a button", anchor="w")
self.button1 = tk.Button(self, text="Button 1", command = self.button1)
self.button2 = tk.Button(self, text="Button 2", command = self.button2)
self.output = tk.Label(self, text="")
# lay the widgets out on the screen.
self.prompt.pack(side="top", fill="x")
self.output.pack(side="top", fill="x", expand=True)
self.button1.pack(side="left")
self.button2.pack(side="right")
def button1(self):
result = "You just pressed button 1."
self.output.configure(text=result)
def button2(self):
result = "You just pressed button 2."
self.output.configure(text=result)
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
This works fine, but I am trying to make it a little cleaner and only use one function. I tried this:
def button(self, string):
result = string
self.output.configure(text=result)
And on the buttons, I used
self.button1 = tk.Button(self, text="Button 1", command = self.button(
"You just pressed button 1"))
self.button2 = tk.Button(self, text="Button 2", command = self.button(
"You just pressed button 2"))
For some reason though, when I add the second argument to the button function, it stops working. If I use the exact same code, it works fine, but when I add a second argument I get this error:
line 31, in button
self.output.configure(text=result)
AttributeError: Example instance has no attribute 'output'
What is the problem?