Tkinter- Possibly a basic question

2008-07-30 Thread joshdw4
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


Re: Tkinter- Possibly a basic question

2008-07-31 Thread joshdw4
On Jul 30, 6:48 pm, "Guilherme Polo" <[EMAIL PROTECTED]> wrote:
> On Wed, Jul 30, 2008 at 6:33 PM,  <[EMAIL PROTECTED]> wrote:
> >...
>
> ...
>
> The second option is to not create the root there, instead, make App
> inherit Tk. I rarely see people doing this, but it works too. Here you
> won't need to store the parent in an instance attribute, given it is
> always accessible through self.master since you are subclassing Tk.
>
> ...
>
> --
> -- Guilherme H. Polo Goncalves

Excellent, this one was easy enough for me to understand/implement and
it worked. Thanks for the help.
--
http://mail.python.org/mailman/listinfo/python-list