I hate to do this, but I've thoroughly exhausted google search. Yes, it's that pesky root window and I have tried withdraw to no avail. I'm assuming this is because of the methods I'm using. I guess my question is two-fold. 1) How do I get rid of that window? 2) Any comments in general? I am just learning python (and coding with classes), so I'm sure there are things I should pound into my head before I learn bad habits.
Here's the code. It will eventually be a voltage measurement using an Arduino board. Just a simple plot for now. import Tkinter, time class App(Tkinter.Toplevel): def __init__(self,parent): Tkinter.Toplevel.__init__(self,parent) self.parent = parent self.initialize(parent) def initialize(self,parent): #create a menu self.menu = Tkinter.Menu(self) self.config(menu=self.menu) self.menu.filemenu = Tkinter.Menu(self.menu) self.menu.add_cascade(label="File", menu=self.menu.filemenu) #for later use #self.menu.filemenu.add_separator() self.menu.filemenu.add_command(label="Exit", command=self.kill) self.menu.helpmenu = Tkinter.Menu(self.menu) self.menu.add_cascade(label="Help", menu=self.menu.helpmenu) self.menu.helpmenu.add_command(label="About...", command=self.callback) #plotting canvas creation self.axis = SimplePlot(self,1000,500) #status bar self.status = StatusBar(self) self.resizable(width=Tkinter.FALSE,height=Tkinter.FALSE) def callback(self): #calls the function within status bar to set the new text, uses a tuple self.status.settext("%s %s","This callback","holds a place for now!") def kill(self): self.parent.quit() self.parent.destroy() def plot_data(self,data): self.axis.plot(data) class StatusBar(Tkinter.Frame): #initializes and draws def __init__(self,parent): Tkinter.Frame.__init__(self, parent) self.parent = parent self.label = Tkinter.Label(self.parent, bd=1, relief=Tkinter.SUNKEN, anchor=Tkinter.W,text='None') self.label.pack(fill=Tkinter.X) def settext(self, format,*args): self.label.config(text=format % args) self.label.update_idletasks() def clear(self): self.label.config(text="") self.label.update_idletasks() class SimplePlot(Tkinter.Frame): "Creates a simple plot frame of time<10 and V<5 of pixel size wxh" def __init__(self,parent,w,h): #this line was taken from online... not sure why it works, #but it allows packing outside of this __init__ Tkinter.Frame.__init__(self, parent) self.parent = parent self.canvas = Tkinter.Canvas(parent,width=w,height=h) #frame height in pixels self.canvas.h = h #frame width in pixels self.canvas.w = w self.canvas.pack(fill=Tkinter.X) #draw gridlines self.gridon() def gridon(self): "Draws gridlines on the plot at every 1 unit" for i in range(100,self.canvas.w,100): self.canvas.create_line(i,0,i,self.canvas.h) for i in range(100,self.canvas.h,100): self.canvas.create_line(0,i,self.canvas.w,i) def plot(self, data): "Plots data given as data = [], data.append( (x,y) )" for x, y in data: px = int(x/10*self.canvas.w) py = int(self.canvas.h-y/5*self.canvas.h) self.canvas.create_rectangle((px-1, py-1, px+1, py+1), outline="red") if __name__ == "__main__": root = Tkinter.Tk() root.withdraw() #create main window a = App(root) a.title('Plot') #create a sample data range for testing #data ranges from x=0, y=0 to x=10, y=5 data = [] for i in range(1000): data.append( (float(i)/1000*10,float(i)/1000*5) ) a.plot_data(data) #loop until destroy a.mainloop() -- http://mail.python.org/mailman/listinfo/python-list