Python Forum
Get name of command button - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: Get name of command button (/thread-31372.html)



Get name of command button - Heyjoe - Dec-07-2020

import tkinter as tk

root = tk.Tk()
myfont = "helvitica 25"
mybg = "light sky blue"
myheight = 4
mywidth = 60
myheight2 = 6
mywidth2 = 20
myheight3 = 3
mywidth3 = 20
labcol = "spring green"
anscol = "yellow"
otherbutcol = "light sky blue"
mypadx =0
mypady=0


class Main:

    def __init__(self, root):
        self.root = root
        root.geometry('1200x1200')
        self.First()

    def First(self):
        self.firstframe = tk.Frame(self.root)
        self.firstframe.grid(row=0, column=0)


        self.firstlabel = tk.Label(self.firstframe, text="firstlabel ", bg=labcol, font=myfont, relief="groove")
        self.firstlabel .config(height=myheight, width=mywidth)
        self.firstlabel .grid(row=1, column=1, sticky=tk.W)

        self.firstcommandbutton = tk.Button(self.firstframe, text="firstcommandbutton", bg=otherbutcol, font=myfont,
                                     relief="groove", command=self.Second)
        self.firstcommandbutton.config(height=myheight, width=mywidth)
        self.firstcommandbutton.grid(row=2, column=1, sticky=tk.W)
        self.quitbn = tk.Button(self.firstframe, text="Quit", font=myfont, bg="red", relief="groove",
                                command=self.firstframe.quit)
        self.quitbn.config(height=myheight, width=mywidth)
        self.quitbn.grid(row=3, column=1, sticky=tk.W)


    def Second (self):

        print("It worked")

m = Main(root)

root.mainloop()
import tkinter as tk

root = tk.Tk()
myfont = "helvitica 25"
mybg = "light sky blue"
myheight = 4
mywidth = 60
myheight2 = 6
mywidth2 = 20
myheight3 = 3
mywidth3 = 20
labcol = "spring green"
anscol = "yellow"
otherbutcol = "light sky blue"
mypadx =0
mypady=0


class Main:

    def __init__(self, root):
        self.root = root
        root.geometry('1200x1200')
        self.First()

    def First(self):
        self.firstframe = tk.Frame(self.root)
        self.firstframe.grid(row=0, column=0)


        self.firstlabel = tk.Label(self.firstframe, text="firstlabel ", bg=labcol, font=myfont, relief="groove")
        self.firstlabel .config(height=myheight, width=mywidth)
        self.firstlabel .grid(row=1, column=1, sticky=tk.W)

        self.firstcommandbutton = tk.Button(self.firstframe, text="firstcommandbutton", bg = otherbutcol, font=myfont,
                                     relief="groove", command=self.Second)
        self.firstcommandbutton.config(height=myheight, width=mywidth)
        self.firstcommandbutton.grid(row=2, column=1, sticky=tk.W)
        self.quitbn = tk.Button(self.firstframe, text="Quit", font=myfont, bg="red", relief="groove",
                                command=self.firstframe.quit)
        self.quitbn.config(height=myheight, width=mywidth)
        self.quitbn.grid(row=3, column=1, sticky=tk.W)


    def Second (self):

        print("It worked")

m = Main(root)

root.mainloop()
This code creates a command button called "firstcommandbutton". This button calls the method "Second". Can I create code in Second, that gives me the name of the firstcommandbutton, and reads it into a variable.? If that is not possible can I get the text of the firstcommandbutton?


RE: Get name of command button - deanhystad - Dec-07-2020

Why? If you want to access the button that called a finction it is easier to just pass the button as an argument.
self.firstcommandbutton.configure(command=lambda x = self.firstcommandbutton: self.Second(x))

def second(button):
    print(button['text']



RE: Get name of command button - Heyjoe - Dec-09-2020

This is how I changed the code based on your answer. It now gives me a
m = Main(root)
^
SyntaxError: invalid syntax


import tkinter as tk

root = tk.Tk)
myfont = "helvitica 25"
mybg = "light sky blue"
myheight = 4
mywidth = 60
myheight2 = 6
mywidth2 = 20
myheight3 = 3
mywidth3 = 20
labcol = "spring green"
anscol = "yellow"
otherbutcol = "light sky blue"
mypadx = 0
mypady = 0


class Main:

    def __init__(self, root):
        self.root = root
        root.geometry('1200x1200')
        self.First()

    def First(self):
        self.firstframe = tk.Frame(self.root)
        self.firstframe.grid(row=0, column=0)

        self.firstlabel = tk.Label(self.firstframe, text="firstlabel ", bg=labcol, font=myfont, relief="groove")
        self.firstlabel.config(height=myheight, width=mywidth)
        self.firstlabel.grid(row=1, column=1, sticky=tk.W)

        self.firstcommandbutton = tk.Button(self.firstframe, text="firstcommandbutton", bg=otherbutcol, font=myfont,
                                            relief="groove")
        self.firstcommandbutton.config(height=myheight, width=mywidth, command=lambda x = self.firstcommandbutton: self.Second(x))
        self.firstcommandbutton.grid(row=2, column=1, sticky=tk.W)
        self.quitbn = tk.Button(self.firstframe, text="Quit", font=myfont, bg="red", relief="groove",
                                command=self.firstframe.quit)
        self.quitbn.config(height=myheight, width=mywidth)
        self.quitbn.grid(row=3, column=1, sticky=tk.W)

    def second(button):
        print(button['text']

m = Main(root)

root.mainloop()



RE: Get name of command button - deanhystad - Dec-10-2020

You should fix the syntax error. The error is not this line "m = Main(root)".

Here are a couple of methods that receive a widget as an argument and perform some action on the widget.
import tkinter as tk
 
class MyWindow:
    def __init__(self, root):
        frame = tk.Frame(root)
        frame.pack(expand=True, fill=tk.BOTH)
        
        label = tk.Label(frame, text="Press the Button")
        label.pack(expand=True, fill=tk.BOTH, padx=5, pady=5)
 
        button = tk.Button(frame, text="This is the Button")
        button.config(command=lambda:self.button_pressed(button, label))
        button.pack(expand=True, fill=tk.BOTH, padx=5, pady=5)

        quitbn = tk.Button(frame, text="Quit", command=lambda:self.quit(root))
        quitbn.pack(expand=True, fill=tk.BOTH, padx=5, pady=5)
 
    def button_pressed(self, button, label):
        label['text'] = 'The button was pressed'
        button['state'] = tk.DISABLED
 
    def quit(self, window):
        print('Quitting')
        window.destroy()
 
root = tk.Tk()
root.geometry('200x200')
MyWindow(root)
root.mainloop()