Posts: 43
Threads: 18
Joined: Jun 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?
Posts: 6,779
Threads: 20
Joined: Feb 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']
Posts: 43
Threads: 18
Joined: Jun 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()
Posts: 6,779
Threads: 20
Joined: Feb 2020
Dec-10-2020, 04:30 AM
(This post was last modified: Dec-10-2020, 04:30 AM by deanhystad.)
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()
|