What i’m trying to do is in the onopen function in Controller class i’m trying to run the update_listbox function in the View class which will update the listbox. This is giving me the error update_listbox() must be called with View instance as first argument. I don’t fully understand what i’m doing so it would be very helpful if someone could explain to me what i’m doing wrong here and how to do it correctly.
cheers tchadwik
from Tkinter import *
import tkMessageBox
import tkFileDialog
from tkFileDialog import askopenfilename
from tkMessageBox import askokcancel
class Controller(object):
def __init__(self, master=None):
self._master = master
#filemenubar
self.menu()
#listbox
self.listboxFrame = View(master)
self.listboxFrame.pack(fill=BOTH, expand=YES)
#entry widget
self.EntryFrame = Other(master)
self.EntryFrame.pack(fill = X)
def menu(self):
menubar = Menu(self._master)
self._master.config(menu=menubar)
fileMenubar = Menu(menubar)
fileMenubar.add_command(label="Open Products File", command=self.onopen)
fileMenubar.add_command(label="Save Products File", command=self.onsave)
fileMenubar.add_command(label="exit", command=self.onExit)
menubar.add_cascade(label="File", menu=fileMenubar)
def onopen(self):
fname = askopenfilename()
products.load_items(fname)
View.update_listbox() #
#this gives me error stating that it needs View instance as first argument
#and adding self here only gives it the controller instance
class View(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.list = Listbox(self, selectmode=EXTENDED)
self.list.pack(fill=BOTH, expand=YES)
self.current = None
self.update_listbox()
def update_listbox(self):
temp=products.get_keys()
for i in temp:
self.list.insert(END, str(products.get_item(i)))
You need to instantiate a
Viewobject. For example:This is because the memory for the member variables (for example:
self.list) is not allocated until the object is instantiated. Or another way to put it is thatself.listis not created untilView.__init__()is called, which happens when you create aViewobject from theViewclass definition.