2016-06-22 2 views
1

Мне хотелось узнать немного tkinter. Я следовал за пару гидов на sentdex на Youtube и чувствовал, что у меня есть хорошее понимание основ. Тем не менее, теперь я пытаюсь написать сценарий, который работает как быстрый журнал, и я сталкиваюсь с проблемами получения текста из ввода/текста/optionmenu.Как получить значение элемента в tkinter при использовании класса?

Если я настроил gui вне класса, я могу просто сделать variable.get(), и все это ducky. Но когда у меня есть свой материал gui tkinter в классе, я получаю исключение, которое не определено.

Вот мой код. Проблема заключается в def saveButtonCommand (self):

Как получить значения noteText и 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() 

ответ

2

Ну, я исправил его, вы должны использовать self. "Variable-name", чтобы объявить доступный атрибут.

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() 
+0

Спасибо! Я пробовал каждую комбинацию добавления self к функции saveButtonCommand, которую я не думал добавлять к самим переменным. Лес через деревья. –

Смежные вопросы