Reputation: 191
I wanted to learn a bit of tkinter. I followed a couple guides by sentdex on Youtube and feel like I have a good understanding of the basics. However, now I am trying to write a script that works as quick log and I am running into issues getting the text from the entry/text/optionmenu.
If I set up the gui outside of class I can simply do a variable.get() and all is ducky. But when I have my gui tkinter stuff in a class I get an Exception that is not defined.
Here is my code. The issue lies in def saveButtonCommand(self):
How do I get the values of noteText and officeOption/Var?
# Imports
from tkinter import *
from tkinter import messagebox
import sys, datetime
class Window(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title("SPL - " + str(datetime.date.today()))
self.configure(background="#e7e7e7")
self.pack(fill=BOTH, expand=1)
# Menu -> Quit, Open Log
menu = Menu(self.master)
self.master.config(menu=menu)
file = Menu(menu)
file.add_command(label="Open Log")
file.add_command(label="Quit", command=self.client_exit)
menu.add_cascade(label="File", menu=file)
# Window Items
# Office Drop Down
OFFICES = [
"County Building",
"Adult Probation",
"Building & Zoning",
"Circuit Court",
" - CC. Family Division",
" - CC. Friend of the Court",
" - CC. Juvenile Division",
"Clerk",
"Commissioners",
"Computer Infomration Systems",
"Corporation Counsel",
"District Court",
" - DC. Community Corrections",
" - DC. Magistrate Office",
" - DC. Probation Office",
"Economic Development Corp.",
"Equalization",
"Maintenance",
"Probate Court",
"Prosecuting Attorney",
"Public Guardian",
"Register of Deeds",
"Sheriff Department",
" - SD. Booking",
" - SD. Kitchen",
" - SD. Records",
" - SD. Squadroom",
"Social Security",
"Tax Mapping/GIS",
"Treasurer",
"Veteran's"
]
officeLabel = Label(self, text="Office:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
officeLabel.place(x=5,y=5)
officeOptionVar = StringVar()
officeOptionVar.set(OFFICES[0]) # Default Value
officeOption = OptionMenu(self, officeOptionVar, *OFFICES)
officeOption.place(x=5,y=28,width=310)
# Note
noteLabel = Label(self, text="Note:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
noteLabel.place(x=5,y=58)
noteText = Text()
noteText.place(x=5, y=81, width=310, height=225)
# Save Button
saveButton = Button(self, text='Save', command=self.saveButtonCommand)
saveButton.place(x=5, y=312, width=310, height=50)
def client_exit(self):
exit()
def saveButtonCommand(self):
office = officeOptionVar.get()
note = noteText.get("1.0","end-1c")
messagebox.showinfo(title="Test", message=note)
root = Tk()
root.resizable(0,0)
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
geo_width = 320
geo_height = 370
geo_offset_w = int((screen_width/2)-(geo_width/2))
root.geometry(str(geo_width) + "x" + str(geo_height) + "+" + str(geo_offset_w) + "+200")
app = Window(root)
root.mainloop()
Upvotes: 0
Views: 763
Reputation: 66
Well I fixed it, you should use self."variable-name" to declare an accessible attribute.
from tkinter import *
from tkinter import messagebox
import sys, datetime
class Window(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title("SPL - " + str(datetime.date.today()))
self.configure(background="#e7e7e7")
self.pack(fill=BOTH, expand=1)
# Menu -> Quit, Open Log
menu = Menu(self.master)
self.master.config(menu=menu)
file = Menu(menu)
file.add_command(label="Open Log")
file.add_command(label="Quit", command=self.client_exit)
menu.add_cascade(label="File", menu=file)
# Window Items
# Office Drop Down
OFFICES = [
"County Building",
"Adult Probation",
"Building & Zoning",
"Circuit Court",
" - CC. Family Division",
" - CC. Friend of the Court",
" - CC. Juvenile Division",
"Clerk",
"Commissioners",
"Computer Infomration Systems",
"Corporation Counsel",
"District Court",
" - DC. Community Corrections",
" - DC. Magistrate Office",
" - DC. Probation Office",
"Economic Development Corp.",
"Equalization",
"Maintenance",
"Probate Court",
"Prosecuting Attorney",
"Public Guardian",
"Register of Deeds",
"Sheriff Department",
" - SD. Booking",
" - SD. Kitchen",
" - SD. Records",
" - SD. Squadroom",
"Social Security",
"Tax Mapping/GIS",
"Treasurer",
"Veteran's"
]
officeLabel = Label(self, text="Office:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
officeLabel.place(x=5,y=5)
self.officeOptionVar = StringVar()
self.officeOptionVar.set(OFFICES[0]) # Default Value
officeOption = OptionMenu(self, self.officeOptionVar, *OFFICES)
officeOption.place(x=5,y=28,width=310)
# Note
noteLabel = Label(self, text="Note:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
noteLabel.place(x=5,y=58)
self.noteText = Text()
self.noteText.place(x=5, y=81, width=310, height=225)
# Save Button
saveButton = Button(self, text='Save', command=self.saveButtonCommand)
saveButton.place(x=5, y=312, width=310, height=50)
def client_exit(self):
exit()
def saveButtonCommand(self):
office = self.officeOptionVar.get()
note = self.noteText.get("1.0","end-1c")
messagebox.showinfo(title="Test", message=note)
root = Tk()
root.resizable(0,0)
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
geo_width = 320
geo_height = 370
geo_offset_w = int((screen_width/2)-(geo_width/2))
root.geometry(str(geo_width) + "x" + str(geo_height) + "+" + str(geo_offset_w) + "+200")
app = Window(root)
root.mainloop()
Upvotes: 2