class doesn't open its window - newbie question

2010-08-01 Thread Chris Hare
I am a newbie to python, but not programming.

I have a menubar item 

displaySubMenu.add_command(label="External", command=externalDisplay)

externalDisplay is a new class, which I have already imported.  The class is 
here:

from Tkinter import *
from datetime import datetime, date, time
import urllib
from PIL import Image
#import Image # PIL required
import ImageTk

backColor = "Gray"
highcolor = "Green"
entryColor = "Cyan"
okColor = "Green"
warnColor = "Red"

class externalDisplay(Frame):

def __init__(self,callSign,nexrad):
"""Initialize yourself"""
self.callSign = callSign
self.nexrad = nexrad
#"""Initialise the base class"""
Frame.__init__(self)

"Set the Window Title"""
#self.title( "Test")


self.findu = "http://www.findu.com/cgi-bin/radar-find.cgi?call="; + 
self.callSign + "&radar=" + self.nexrad

"""Display the main window" with a little bit of padding"""
self.grid(padx=5,pady=5)
self.CreateWidgets()
   
def CreateWidgets(self):
#"""Create all the widgets that we need"""
self.f = Frame(self, bd=0, bg=backColor)
self.title = "netcomm Online Radar"
self.f.grid()
#
# Insert the date and time the radar image was updated
#
self.lblLastUpdate = Label(self.f, text="Last Updated: " + 
str(datetime.now()), bg=backColor)
self.lblLastUpdate.grid( row=0, column=0, sticky=W)
self.btnRefresh = Button(self.f, text="Refresh", 
command=handlesExternalDisplayByClick, 
bg=backColor,highlightbackground=okColor,highlightcolor=highcolor)
self.btnRefresh.grid(row=0, column=1)
self.btnRefresh = Button(self.f, text="Close", command=self.destroy, 
bg=backColor,highlightbackground=warnColor,highlightcolor=highcolor)
self.btnRefresh.grid(row=0, column=2)
#
# Start the download from findu
#
#
# This gets the image and saves it to the local disk as "image.png"
#
# NOTE - will ideally want to conver this to GIF and save it using
#the date as part of the filename so the net can be re-created
#for reporting and to create a flipbook of the radar images
#
urllib.urlretrieve(self.findu, "image.png")
Image.open("image.png").save("image.gif")
self.photo = PhotoImage(file="image.gif")
#
# create a canvas of the appropriate size for the image
#
self.w = Canvas(self.f, width=600, height=550)
#
# convert it into a photo item we can use in the display
#
self.netRadarImage = Label(self.w, image=self.photo)
self.netRadarImage.image = self.photo
self.w.grid(row=1, column=0, columnspan=3)
self.netRadarImage.grid( row=1, column=0)

def handlesExternalDisplayByClick(self):
#
# destroy the existing frame the radar is in
#
self.destroy()
#
# rebuild the radarWidgets
#
createRadarWidgets(frameRadar)

def handlesRadarRefreshByClick(self):
#
# destroy the existing frame the radar is in
#
self.destroy()
#
# rebuild the radarWidgets
#
self.update()

if __name__ == "__main__":
guiFrame = externalDisplay("AE5PL-10","fws")
guiFrame.mainloop()

The problem is that the window defined in the class never appears, and I don't 
know why.  I would like to get all of the code for the window into a single 
file which I import, but since I can't make this work right, I don't want to 
invest the time yet.Eve worse, is that when I run the code as a standalone 
module and click on the close  button, I am left with a tk window instead of 
the app actually closing.

Any suggestions are appreciated.

-- 
http://mail.python.org/mailman/listinfo/python-list


image resize doesn't work

2010-08-01 Thread Chris Hare

I have the following chunk of code.  Although it seems to execute fine, no 
errors, the image is never resized.  What am I missing?

imagePNG = Image.open("image.png")
photo = ImageTk.PhotoImage(imagePNG
canvasWidth = 300
canvasHeight = 275
photo = 
ImagePNG.resize((canvasWidth,canvasHeight),Image.ANTIALIAS)
netRadarImage = Label(w, image=photo)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: image resize doesn't work

2010-08-01 Thread Chris Hare

On Aug 1, 2010, at 10:24 AM, rantingrick wrote:

> On Aug 1, 7:35 am, Chris Hare  wrote:
>> I have the following chunk of code.  Although it seems to execute fine, no 
>> errors
> 
> Not True! it contains syntax errors. Check the posted code and next
> time post all the code.
> -- 
> http://mail.python.org/mailman/listinfo/python-list

Hmmm... ok
here is the code.  I get no errors on my console when it execute

urllib.urlretrieve(findu, "image.png")
logging.debug("createRadarWidgets(): radar download complete")
logging.debug("createRadarWidgets(): user has radarPanelSize of 
" + root.radarPanelSize.get())
#
# open the image file
#
if os.path.exists("image.gif"):
ctime = os.stat(dbPath)[ST_CTIME]
print ctime
filetime = datetime.fromtimestamp(ctime)
filetime = filetime.strftime("%Y%m%d%H%M%S")
print str(filetime)
#filetime = datetime(ctime).isoformat()
#print ctime
imagePNG = Image.open("image.png")
#photo = ImageTk.PhotoImage(imagePNG)
Image.open("image.png").save("image.gif")
image = Image.open("image.gif")
photo = PhotoImage(file="image.gif")
#photoimg = ImageTk.PhotoImage(photo)
#
# NOTE: - will want to track the size of the image displayed 
based upon
# the actual screen resolution
#   Full/External = 600x550 - full file size
#   Large = 450x412
#   Medium = 300x275
#   Small = 150x137
#
if root.radarPanelSize.get() == "Large":
canvasWidth = 450
canvasHeight = 412
elif root.radarPanelSize.get() == "Medium":
canvasWidth = 300
canvasHeight = 275
elif root.radarPanelSize.get() == "Small":
canvasWidth = 150
canvasHeight = 137
logging.debug("createRadarWidgets(): creating image size " + 
str(canvasWidth) + "x" + str(canvasHeight))
#
# create a canvas of the appropriate size for the image
#
w = Canvas(f, width=canvasWidth, height=canvasHeight)
if root.radarPanelSize.get() == "Off":
logging.debug("createRadarWidgets(): no net, no radar")
netRadarImage = Label(w, text="No current radar")
else:
#
# convert it into a photo item we can use in the display
#
# photo = 
photo.resize((canvasWidth,canvasHeight),Image.ANTIALIAS)
netRadarImage = Label(w, image=photo)
netRadarImage.image = photo
w.grid(row=1, column=0, columnspan=3)
netRadarImage.grid( row=1, column=0)

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: image resize doesn't work

2010-08-01 Thread Chris Hare

On Aug 1, 2010, at 1:08 PM, Peter Otten wrote:

> Chris Hare wrote:
> 
> 
>> On Aug 1, 2010, at 10:24 AM, rantingrick wrote:
>> 
>>> On Aug 1, 7:35 am, Chris Hare  wrote:
>>>> I have the following chunk of code.  Although it seems to execute fine,
>>>> no errors
>>> 
>>> Not True! it contains syntax errors. Check the posted code and next
>>> time post all the code.
>>> --
>>> http://mail.python.org/mailman/listinfo/python-list
>> 
>> Hmmm... ok
>> here is the code.  I get no errors on my console when it execute
>> 
>> urllib.urlretrieve(findu, "image.png")
> 
> I get a NameError on the very first line.
> 
>>>> urllib.urlretrieve(findu, "image.png")
> Traceback (most recent call last):
>  File "", line 1, in 
> NameError: name 'urllib' is not defined
> 
> When you want to demonstrate a problem try to make a self-contained example, 
> i. e. one that can be run without the need for us guess the surrounding 
> code. Remove everything that is irrelevant for the problem like the logging 
> in code below and the png/gif conversion gymnastics.
> 
> Anyway, here is a self-contained demo (you have to pass the filename of an 
> image on the commandline):
> 
> import Tkinter
> import ImageTk
> import Image
> import sys
> 
> [filename] = sys.argv[1:]
> 
> image = Image.open(filename)
> 
> root = Tkinter.Tk()
> frame = Tkinter.Frame(root)
> frame.pack()
> label = Tkinter.Label(root)
> label.pack()
> 
> def make_resize(percent):
>def resize():
>width, height = image.size
>label.image = label["image"] = ImageTk.PhotoImage(
>image=image.resize((width*percent//100, height*percent//100)))
>return resize
> 
> make_resize(100)()
> 
> pairs = [
>("Small", 20),
>("Medium", 50),
>("Original", 100),
>("Big", 200)]
> 
> for i, (text, percent) in enumerate(pairs):
>button = Tkinter.Button(frame, text=text, command=make_resize(percent))
>button.grid(row=0, column=i)
> 
> root.mainloop()
> 
> Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list

Thanks for the help.  My one week of python is getting a workout.

I have shortened it all down and made it a standalone example, using yours as a 
model.  Your example, works, but it will take a lot of effort to retrofit it 
into the code I have.  (which is maybe not a bad idea,).

Anyway

from Tkinter import *
import ImageTk
import Image
import sys

def sizeit(filename):
image = Image.open(filename)
w,h = image.size
print w, h
photo = ImageTk.PhotoImage(file=filename)
canvasWidth = 450
canvasHeight = 412
image = image.resize((canvasWidth,canvasHeight),Image.ANTIALIAS)
w,h = image.size
print w, h
netRadarImage = Label(frame, image=image)
netRadarImage.image = photo
w.grid(row=1, column=0, columnspan=3)
netRadarImage.grid( row=1, column=0)

[filename] = sys.argv[1:]

root = Tk()
frame = Frame(root)
frame.grid()
sizeit(filename)

root.mainloop()

Just like yours it takes a filename.  Unlike yours, mine gets an error that I 
can't figure out and is likely the root of the problem.  

When I run this code I get

600 550 <== ORIGINAL image size
450 412 <== resized image size
Traceback (most recent call last):
  File "zztest.py", line 26, in 
sizeit(filename)
  File "zztest.py", line 16, in sizeit
netRadarImage = Label(frame, image=image)
  File 
"/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py",
 line 2466, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
  File 
"/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py",
 line 1932, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image "" doesn't exist

So, my problem appeared to be the resize, but in fact is just getting it onto 
the label.

What am I doing wrong?



-- 
http://mail.python.org/mailman/listinfo/python-list


beginner python GUI question

2010-08-01 Thread Chris Hare
I hope I can explain this correctly.

I have a GUI, which is already being processed by a mainloop.  I want to be 
able to open a second window so the user can interact with specific information 
in the second window.  I pulled together this code example

from Tkinter import *

class Net:
def __init__(self,tkWin):
self.window = tkWin
def show(self,t):   
self.l = Label(self.window,text=t)
self.l.grid()
button = Button(self.window, text="Again")
button.bind("", self.Again)
button.grid()
def Again(self,event):
win3 = Tk()
x = Net(win3)
x.show("window 3")

root = Tk()
root.title = "test"
f = Frame(root,bg="Yellow")
l = Label(f,text="window 1")
f.grid()
l.grid()

win2 = Tk()
x = Net(win2)
x.show("window 2")
if __name__ == "__main__":
root.mainloop()

Is this the right way to do things, or would you suggest something different?

Thanks,
Chris

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: image resize doesn't work

2010-08-01 Thread Chris Hare
And I see now what I did wrong - thanks for putting up with the questions.

On Aug 1, 2010, at 4:32 PM, Peter Otten wrote:

> Chris Hare wrote:
> 
>> Thanks for the help.  My one week of python is getting a workout.
>> 
>> I have shortened it all down and made it a standalone example, using yours
>> as a model.  Your example, works, but it will take a lot of effort to
>> retrofit it into the code I have.  (which is maybe not a bad idea,).
> 
> You mean retrofit something that works into something tha doesn't?
> Seriously, you should never be afraid to throw away code, especially while 
> you're still in the early phase of learning the language.
> 
>> def sizeit(filename):
>>image = Image.open(filename)
> 
> Now you have an Image
> 
>>w,h = image.size
>>print w, h
>>photo = ImageTk.PhotoImage(file=filename)
> 
> and now a photo, both created from the same file but otherwise independent
> 
>>canvasWidth = 450
>>canvasHeight = 412
>>image = image.resize((canvasWidth,canvasHeight),Image.ANTIALIAS)
> 
> Now you have a new resized Image
> 
>>w,h = image.size
>>print w, h
>>netRadarImage = Label(frame, image=image)
> 
> Label(image=...) expects a PhotoImage
> 
>>netRadarImage.image = photo
>>w.grid(row=1, column=0, columnspan=3)
> 
> Hmm...
> 
>>netRadarImage.grid( row=1, column=0)
> 
> Here's the fixed code:
> 
> def sizeit(filename):
>image = Image.open(filename)
>canvasWidth = 450
>canvasHeight = 412
>image = image.resize((canvasWidth, canvasHeight),Image.ANTIALIAS)
>photo = ImageTk.PhotoImage(image=image)
>netRadarImage = Label(frame, image=photo)
>netRadarImage.image = photo
>netRadarImage.grid(row=0, column=0)
> 
> In plain English:
> 
> - open the Image using the PIL
> - resize it
> - wrap it into a PhotoImage
> - wrap the PhotoImage into a Tkinter.Label either by passing it to the 
> initialiser or by assigning to label["image"]
> - make sure the PhotoImage isn't garbage-collected e. g. by assigning to 
> label.image
> 
> Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: image resize doesn't work

2010-08-01 Thread Chris Hare
Thanks Peter - I know what I said sounded stupid :-)

I have been working with Python for a week and as you know sometimes it is 
easier to learn by seeing what you did wrong as compared to what should have 
been done with the same example.  I loved your code by the way - 

Thanks for help just another beginner 


On Aug 1, 2010, at 4:32 PM, Peter Otten wrote:

> Chris Hare wrote:
> 
>> Thanks for the help.  My one week of python is getting a workout.
>> 
>> I have shortened it all down and made it a standalone example, using yours
>> as a model.  Your example, works, but it will take a lot of effort to
>> retrofit it into the code I have.  (which is maybe not a bad idea,).
> 
> You mean retrofit something that works into something tha doesn't?
> Seriously, you should never be afraid to throw away code, especially while 
> you're still in the early phase of learning the language.
> 
>> def sizeit(filename):
>>image = Image.open(filename)
> 
> Now you have an Image
> 
>>w,h = image.size
>>print w, h
>>photo = ImageTk.PhotoImage(file=filename)
> 
> and now a photo, both created from the same file but otherwise independent
> 
>>canvasWidth = 450
>>canvasHeight = 412
>>image = image.resize((canvasWidth,canvasHeight),Image.ANTIALIAS)
> 
> Now you have a new resized Image
> 
>>w,h = image.size
>>print w, h
>>netRadarImage = Label(frame, image=image)
> 
> Label(image=...) expects a PhotoImage
> 
>>netRadarImage.image = photo
>>w.grid(row=1, column=0, columnspan=3)
> 
> Hmm...
> 
>>netRadarImage.grid( row=1, column=0)
> 
> Here's the fixed code:
> 
> def sizeit(filename):
>image = Image.open(filename)
>canvasWidth = 450
>canvasHeight = 412
>image = image.resize((canvasWidth, canvasHeight),Image.ANTIALIAS)
>photo = ImageTk.PhotoImage(image=image)
>netRadarImage = Label(frame, image=photo)
>netRadarImage.image = photo
>netRadarImage.grid(row=0, column=0)
> 
> In plain English:
> 
> - open the Image using the PIL
> - resize it
> - wrap it into a PhotoImage
> - wrap the PhotoImage into a Tkinter.Label either by passing it to the 
> initialiser or by assigning to label["image"]
> - make sure the PhotoImage isn't garbage-collected e. g. by assigning to 
> label.image
> 
> Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


how best to clear objects from a frame

2010-08-01 Thread Chris Hare
Here is the situation:

I have a window with a bunch of widgets in it.  I want to clear the objects in 
a given frame and recreate them to update them.  

The example below destroys the top level frame, and so I can't recreate the 
widgets.  I am likely doing this wrong.
should I be doing this in a class?


Thanks for the help.

from Tkinter import *

def createLeftWidgets(left):
#
# Add the Net Status Section
#
conditions = LabelFrame(left, text="Net Conditions",bg="Gray")
conditions.grid(row=0,column=0);
button = Button(conditions, text="Refresh", 
command=refreshNetConditions, highlightbackground="Green")
button.grid(row=0,column=1, sticky=E)
cText = Text(conditions,bg="Gray")
cText.insert(END, root.netHistory.get())
cText.config(height=12,width=40)
cText.grid(row=1,column=0,columnspan=2)
status = LabelFrame(left, text="Net Details",bg="Gray")
status.grid(row=1,column=0,sticky=N+E+W+S);
lblNetNumber = Label(status, text="Net Number")
lblNetNumber.grid( row=19, column=0, columnspan=2,sticky=W)
return(conditions)
def refreshNetConditions():
global frameLeft
frameLeft.destroy()
root.netHistory.set( "inserting text\n" + root.netHistory.get())
createLeftWidgets(frameLeft)

root = Tk()
root.netHistory = StringVar()
root.netHistory.set("goes into the text widget")
frame = Frame(root)
frame.grid()
frameLeft = createLeftWidgets(frame)

root.mainloop()

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: beginner python GUI question

2010-08-02 Thread Chris Hare

On Aug 1, 2010, at 8:33 PM, rechardchen wrote:

> 于 2010-8-2 6:15, Chris Hare 写道:
>> I hope I can explain this correctly.
>> 
>> I have a GUI, which is already being processed by a mainloop.  I want to be 
>> able to open a second window so the user can interact with specific 
>> information in the second window.  I pulled together this code example
>> 
>> from Tkinter import *
>> 
>> class Net:
>>  def __init__(self,tkWin):
>>  self.window = tkWin
>>  def show(self,t):   
>>  self.l = Label(self.window,text=t)
>>  self.l.grid()
>> button = Button(self.window, text="Again")
>>  button.bind("", self.Again)
>>  button.grid()
>>  def Again(self,event):
>>  win3 = Tk()
>>  x = Net(win3)
>>  x.show("window 3")
>> 
>> root = Tk()
>> root.title = "test"
>> f = Frame(root,bg="Yellow")
>> l = Label(f,text="window 1")
>> f.grid()
>> l.grid()
>> 
>> win2 = Tk()
>> x = Net(win2)
>> x.show("window 2")
>> if __name__ == "__main__":
>>  root.mainloop()
>> 
>> Is this the right way to do things, or would you suggest something different?
>> 
>> Thanks,
>> Chris
>> 
> Using Tkinter.Toplevel may be better. :)
> -- 
> http://mail.python.org/mailman/listinfo/python-list

I thought that would be a good idea, so I changed the code a bit to this:

from Tkinter import *

class Net:
def __init__(self):
self.window = Toplevel()
def show(self,t):   
self.l = Label(self.window,text=t)
self.l.grid()
button = Button(self.window, text="Again")
button.bind("", self.Again)
button2 = Button(self.window, text="Dismiss")
button2.bind("", self.window.destroy)
button.grid()
button2.grid()
def Again(self,event):
x = Net()
x.show("window 3")

root = Tk()
root.title = "test"
f = Frame(root,bg="Yellow")
l = Label(f,text="window 1")
f.grid()
l.grid()

x = Net()
x.show("window 2")
if __name__ == "__main__":
root.mainloop()

I put the call to Topevel into the Class.  This however, gets me an error 
message

Traceback (most recent call last):
  File "a.py", line 27, in 
x = Net()
  File "a.py", line 5, in __init__
self.window = Toplevel()
  File 
"/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py",
 line 1978, in __init__
self.title(root.title())
TypeError: 'str' object is not callable

I should think it would work, but I don't understand why it doesn't.

Thanks

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: beginner python GUI question

2010-08-02 Thread Chris Hare

On Aug 2, 2010, at 7:25 AM, Peter Otten wrote:

> Chris Hare wrote:
> 
>>>> root = Tk()
>>>> root.title = "test"
> 
>> I should think it would work, but I don't understand why it doesn't.
> 
> Try
> 
> root.title("test")
> 
> title() is a method that you are hiding with your attribute leading to 
> problems later on.
> 
> By the way, what kind of documentation are you using for your efforts?
> 
> Here's a concise one:
> 
> http://infohost.nmt.edu/tcc/help/lang/python/tkinter.html
> 
> Also, effbot.org has a lot of information that you best access via Google.
> 
> Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list

I have several python books and I have been using effbot and various other 
sources.  Thanks for the help.  Your suggestion (and a couple others I added) 
got my example working exactly like I want it, so I can incorporate that into 
my program.  Thanks again.

Chris

-- 
http://mail.python.org/mailman/listinfo/python-list


namespaces, scoping and variables

2010-08-02 Thread Chris Hare
I am having a problem getting around this variable namespace thing.

Consider these code bits

File a.py
from Tkinter import *
import a1

def doAgain():
x = a1.Net()
x.show("Again!")

root = Tk()
root.title("test")
f = Frame(root,bg="Yellow")
l = Button(root,text="window 1",command=doAgain)
f.grid()
l.grid()
a = 5
x = a1.Net()
x.show("window 2")
if __name__ == "__main__":
root.mainloop()

File a1.py
from Tkinter import *

class Net:
def __init__(self):
self.window = Toplevel()
def show(self,t):   
self.l = Label(self.window,text=t)
self.l.grid()
button = Button(self.window, text="Again")
button.bind("", self.Again)
button2 = Button(self.window, text="Dismiss")
button2.bind("", self.hide)
button.grid()
button2.grid()
def Again(self,event):
x = Net()
x.show(a)
def hide(self,event):
self.window.destroy()


When I run a.py, it imports a1.py and click on the Again button, I get the error

Exception in Tkinter callback
Traceback (most recent call last):
  File 
"/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py",
 line 1410, in __call__
return self.func(*args)
  File "/Volumes/Development/py/a1.py", line 17, in Again
x.show(a)
NameError: global name 'a' is not defined

I believe this is the expected behavior.  so my question is this -- how do I 
tell the code in a1.py about the variable a, which exists in a.py?  Do I have 
to pass it as part of the function call, or what?  using

global a

in a1.py doesn't change anything.

since I am using SQLite for the disk database, I was thinking I could keep all 
the "global" variables in an in memory database and just access them when I 
need to, but other ideas are welcome.

Thanks,
Chris

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: namespaces, scoping and variables

2010-08-02 Thread Chris Hare
Thanks to everyone for answering my question.  I think its clear now.  I'll 
just go the "stuff 'em in a module and import that" route.

Chris

On Aug 2, 2010, at 3:03 PM, MRAB wrote:

> Chris Hare wrote:
>> I am having a problem getting around this variable namespace thing.
>> Consider these code bits
>> File a.py
>> from Tkinter import *
>> import a1
>> def doAgain():
>>  x = a1.Net()
>>  x.show("Again!")
>> root = Tk()
>> root.title("test")
>> f = Frame(root,bg="Yellow")
>> l = Button(root,text="window 1",command=doAgain)
>> f.grid()
>> l.grid()
>> a = 5
>> x = a1.Net()
>> x.show("window 2")
>> if __name__ == "__main__":
>>  root.mainloop()
>> File a1.py
>> from Tkinter import *
>> class Net:
>>  def __init__(self):
>>  self.window = Toplevel()
>>  def show(self,t):   
>>  self.l = Label(self.window,text=t)
>>  self.l.grid()
>>button = Button(self.window, text="Again")
>>  button.bind("", self.Again)
>>button2 = Button(self.window, text="Dismiss")
>>  button2.bind("", self.hide)
>>  button.grid()
>>  button2.grid()
>>  def Again(self,event):
>>  x = Net()
>>  x.show(a)
>>  def hide(self,event):
>>  self.window.destroy()
>> When I run a.py, it imports a1.py and click on the Again button, I get the 
>> error
>> Exception in Tkinter callback
>> Traceback (most recent call last):
>>  File 
>> "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py",
>>  line 1410, in __call__
>>return self.func(*args)
>>  File "/Volumes/Development/py/a1.py", line 17, in Again
>>x.show(a)
>> NameError: global name 'a' is not defined
>> I believe this is the expected behavior.  so my question is this -- how do I 
>> tell the code in a1.py about the variable a, which exists in a.py?  Do I 
>> have to pass it as part of the function call, or what?  using
>> global a
>> in a1.py doesn't change anything.
>> since I am using SQLite for the disk database, I was thinking I could keep 
>> all the "global" variables in an in memory database and just access them 
>> when I need to, but other ideas are welcome.
> Why in a database? If you need the modules to share it then you could
> put it in a shared module and refer to it there:
> 
> File a.py
> -
> import my_globals
> ...
> my_globals.a = 5
> 
> 
> File a1.py
> --
> import my_globals
> ...
>   x.show(my_globals.a)
> -- 
> http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: how best to clear objects from a frame

2010-08-02 Thread Chris Hare

On Aug 1, 2010, at 10:13 PM, rantingrick wrote:

> On Aug 1, 7:12 pm, Chris Hare  wrote:
>> Here is the situation:
>> 
>> I have a window with a bunch of widgets in it.  I want to clear the objects 
>> in a given frame and recreate them to update them.  
> 
> You need to check out the "w.update" and "w.update_idletasks" methods
> available on all Tkinter widgets. Just FYI: to remove a widget from
> view without destroying it use "w.pack_forget" or "w.grid_forget".
> However if you are simply trying to refresh a widget use one of the
> update methods.
> -- 
> http://mail.python.org/mailman/listinfo/python-list

I will have a look at those.  Consider a frame with a label and a button.  How 
do I address the label to change it from another function in the class?  

-- 
http://mail.python.org/mailman/listinfo/python-list


calling a class method from a menu in a different class

2010-08-02 Thread Chris Hare

What I am trying to do is call a class function from a menu, for example

displaySubMenu.add_radiobutton(label="Medium", 
variable=radarPanelSize, command=radarWidgets.refresh) 

class radarWidgets:
def __init__(self,root):
self.window = root
def refresh(self):
global radar
global refreshTimer
self.refreshTimer.cancel()
logging.debug("handlesRadarRefreshByTimer()")
#
# destroy the existing frame the radar is in
#
self.w.destroy()
self.lblLastUpdate.destroy()
self.btnRefresh.destroy()
#
# rebuild the radarWidgets
#
self.createImage()
self.refreshTimer = threading.Timer( 900, self.refresh)
self.refreshTimer.start()

This doesn't work because the instance of radarWidgets was defined in a 
different class ..

class mainDisplay:
def __init__(self,root):
self.window = root
def show(self): 
#
# Configure the base frame
# 
base=Frame(self.window,bg=backColor,width=1200, height=800)
base.grid()
frameRadar = Frame(base, bd=0, bg=backColor)
frameRadar.grid(row=2,column=1,sticky=N+E+S+W)
#
radar = radarWidgets(frameRadar)
radar.show()

so the actual instance is called "radar".  If I put the instance name in the 
menu item, I get an error that "radar" is unknown.  If I use 
RadarWidgets.refresh ins the command for the menu, I get the error:

TypeError: unbound method refresh() must be called with radarWidgets instance 
as first argument (got nothing instead)

Any ideas?

Thanks!



-- 
http://mail.python.org/mailman/listinfo/python-list


Re: calling a class method from a menu in a different class

2010-08-03 Thread Chris Hare
No offense taken.  I'll get getting the Google Python Style Guide today.  I'll 
package up the code tonight and it to the group.  Fortunately ( or 
unfortunately), it is all in one file right now.

On Aug 2, 2010, at 10:31 PM, rantingrick wrote:

> 
> Chris,
> 
> It looks as if you are calling a class object and not an instance
> object. However i cannot be for sure because you are using improper
> Python style. All classes should be capwords. But here again you have
> used camelcase for the class identifiers "radarWidgets" and
> "mainDisplay", which is bad bad bad!!
> 
> You been asking multiple questions about this code for the last couple
> of days (and thats fine). However, maybe you would do everyone a favor
> by posting the entire code so we can offer suggestions. Just seeing
> seeing a snipit here and a snipit there is not helping because we
> don't know where else you may be screwing up that we cannot see.
> 
> It seems you're committing many faux pas with not only your coding
> style but also your coding practices. I've seen overuse of globals and
> bad styles and on and on. So post the entire code so myself and others
> can go through this mess and get it sorted out. If you keep on with
> your bad habits you're never going to become proficient with Python.
> 
> I am sorry if this post seems condescending because that is not the
> case.
> -- 
> http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: calling a class method from a menu in a different class

2010-08-03 Thread Chris Hare
Oh and Risk,
I know I was calling the class object.

class 1 creates the instance object
class 2 tries to use the instance object

so the problem is how to make class 2 knowledgable of instance object?  I guess 
I could pass the instance object into the class, since class1 creates the 
instance and also calls class 2.

On Aug 2, 2010, at 10:31 PM, rantingrick wrote:

> 
> Chris,
> 
> It looks as if you are calling a class object and not an instance
> object. However i cannot be for sure because you are using improper
> Python style. All classes should be capwords. But here again you have
> used camelcase for the class identifiers "radarWidgets" and
> "mainDisplay", which is bad bad bad!!
> 
> You been asking multiple questions about this code for the last couple
> of days (and thats fine). However, maybe you would do everyone a favor
> by posting the entire code so we can offer suggestions. Just seeing
> seeing a snipit here and a snipit there is not helping because we
> don't know where else you may be screwing up that we cannot see.
> 
> It seems you're committing many faux pas with not only your coding
> style but also your coding practices. I've seen overuse of globals and
> bad styles and on and on. So post the entire code so myself and others
> can go through this mess and get it sorted out. If you keep on with
> your bad habits you're never going to become proficient with Python.
> 
> I am sorry if this post seems condescending because that is not the
> case.
> -- 
> http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


problem adding a scrollbar to a text widget

2010-08-04 Thread Chris Hare
Here is my chunk of code.  I can't figure out what I am doing wrong to put my 
scrollbar on the right hand side of the text box.

from Tkinter import *

def showLogFile():
top = Toplevel()
f = Frame(top, bd=0, bg="Gray")
top.title = "netcomm log file"
f.grid()
sc = Scrollbar(top)
sc.grid()
t = Text(f, yscrollcommand = sc.set)
sc.config(command=t.yview)
t.insert(END,"This is a line of text")
t.config(height=20,width=80,bg="Gray")
button = Button(f, text="Dismiss", command=top.destroy, 
highlightbackground="Red")
t.grid()
button.grid()


showLogFile()
mainloop()

-- 
http://mail.python.org/mailman/listinfo/python-list


running a piece of code at specific intervals?

2010-08-04 Thread Chris Hare
Don't say cron :

I want to have a section of my code executed at 15 minute intervals.  I am 
using Threading.timer, but it is causing a problem sinxe I am using sqlite3 and 
the thread support gives me an error, which aborts part of my code.

So, is there an alternative to threading.timer?


-- 
http://mail.python.org/mailman/listinfo/python-list


adding optionMenu items in code

2010-08-04 Thread Chris Hare

I have an option menu

self.w = OptionMenu(self.frameNewNet, self.variable, "one", "two", "three")

Is there a way to add items to this programmatically, i.e. using values from a 
database?
-- 
http://mail.python.org/mailman/listinfo/python-list


assigning variables from list data

2010-08-05 Thread Chris Hare

I have a database query result (see code below).  In PHP, I would have said

list(var1,var2,var) = $result

and each element in the list would be assigned to each of the named variables.  
I have my data coming out of the database, and I can see it is a list.  so my 
question is, instead of having to do the variable assignment as I have it here, 
is there a way more like PHP or am I stuck with it?

import sqlite3 as sqlite

try:
print "connecting to disk db ..."
conn = sqlite.connect("netcomm.db")
except:
print "oops"

print "retrieving data"
cursor = conn.cursor()
cursor.execute('select * from net where NetNumber > 0')
list = cursor.fetchone()
print list
print len(list)
for item in list:
print item
netNumber = list[0]
netType = list[1]
netConditions = list[2]
netStartLocal = list[3]
NCS = list[4]
NCS1 = list[5]
RADAR = list[6]
NetFreq = list[7]
Repeater = list[8]
Notes = list[9]
-- 
http://mail.python.org/mailman/listinfo/python-list


defining, raising and catching exceptions

2010-08-05 Thread Chris Hare

I have a block of test code, where I am trying to raise and catch my own user 
defined exception

class NetActiveError(RuntimeError):
def __init__(self,error):
self.args = error

def a():
try:
fh = open("me.txt", "r")
except Exception as (errno, errText):
print errText
try:
b()
except NetActiveError as (errono, errText):
print errno, errText

def b():
print "def b"
raise NetActiveError,"net already running"


a()


When I run it though, I get the following error:

chare$ python z
No such file or directory
def b
Traceback (most recent call last):
  File "z", line 20, in 
a()
  File "z", line 12, in a
except NetActiveError as (errono, errText):
ValueError: too many values to unpack


What am I doing wrong here?


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: defining, raising and catching exceptions

2010-08-05 Thread Chris Hare
okay - but why does the response come back like

No such file or directory
def b
('n', 'e', 't', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'r', 'u', 'n', 
'n', 'i', 'n', 'g')


On Aug 5, 2010, at 5:49 PM, Benjamin Kaplan wrote:

> What makes you think it has to do with user-defined exceptions?
> 
>>>> try :
> ...raise Exception("hello")
> ... except Exception as (errno, errText) :
> ...   print "whatever"
> ...
> Traceback (most recent call last):
> ValueError: need more than 1 values to unpack
> 
> An Exception is an object, not a tuple of number and text.
> 
> Raise an instance of the exception, not the class:
> 
> raise NetActiveError("net already running")
> 
> And then catch the exception object
> 
> except NetActiveError as err:
>   print err.args
> 
> On Thu, Aug 5, 2010 at 3:41 PM, Chris Hare  wrote:
>> 
>> I have a block of test code, where I am trying to raise and catch my own 
>> user defined exception
>> 
>> class NetActiveError(RuntimeError):
>>def __init__(self,error):
>>self.args = error
>> 
>> def a():
>>try:
>>fh = open("me.txt", "r")
>>except Exception as (errno, errText):
>>print errText
>>try:
>>b()
>>except NetActiveError as (errono, errText):
>>print errno, errText
>> 
>> def b():
>>print "def b"
>>raise NetActiveError,"net already running"
>> 
>> 
>> a()
>> 
>> 
>> When I run it though, I get the following error:
>> 
>> chare$ python z
>> No such file or directory
>> def b
>> Traceback (most recent call last):
>>  File "z", line 20, in 
>>a()
>>  File "z", line 12, in a
>>except NetActiveError as (errono, errText):
>> ValueError: too many values to unpack
>> 
>> 
>> What am I doing wrong here?
>> 
>> 
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>> 
> -- 
> http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: defining, raising and catching exceptions

2010-08-05 Thread Chris Hare

On Aug 5, 2010, at 7:37 PM, MRAB wrote:

> Chris Hare wrote:
>> okay - but why does the response come back like
>> No such file or directory
>> def b
>> ('n', 'e', 't', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'r', 'u', 'n', 
>> 'n', 'i', 'n', 'g')
> The class Exception saves its arguments in the 'args' instance
> attribute, and when it prints the exception it prints those arguments:
> 
> 
> >>> e = Exception(1, 2, 3)
> >>> print e.args
> (1, 2, 3)
> >>> print e
> (1, 2, 3)
> >>> print repr(e)
> Exception(1, 2, 3)
> 
> 
> NetActiveError inherits from RuntimeError, and ultimately from
> Exception.
> 
> NetActiveError sets the 'args' attribute to its single string argument,
> and when the exception is printed out it thinks it's the arguments:
> 
> 
> >>> e.args = "string"
> >>> print e
> ('s', 't', 'r', 'i', 'n', 'g')
> >>> print repr(e)
> Exception('s', 't', 'r', 'i', 'n', 'g')
> 
> 
> The correct way to create your own exceptions is to call the
> superclass's __init__ method:
> 
> 
> >>> class NetActiveError(RuntimeError):
> ... def __init__(self, error):
> ... RuntimeError.__init__(self, error)
> ...
> >>> e = NetActiveError("string")
> >>> print e
> string
> >>> print repr(e)
> NetActiveError('string',)
> 
> 
>> On Aug 5, 2010, at 5:49 PM, Benjamin Kaplan wrote:
>>> What makes you think it has to do with user-defined exceptions?
>>> 
>>>>>> try :
>>> ...raise Exception("hello")
>>> ... except Exception as (errno, errText) :
>>> ...   print "whatever"
>>> ...
>>> Traceback (most recent call last):
>>> ValueError: need more than 1 values to unpack
>>> 
>>> An Exception is an object, not a tuple of number and text.
>>> 
>>> Raise an instance of the exception, not the class:
>>> 
>>> raise NetActiveError("net already running")
>>> 
>>> And then catch the exception object
>>> 
>>> except NetActiveError as err:
>>>  print err.args
>>> 
>>> On Thu, Aug 5, 2010 at 3:41 PM, Chris Hare  wrote:
>>>> I have a block of test code, where I am trying to raise and catch my own 
>>>> user defined exception
>>>> 
>>>> class NetActiveError(RuntimeError):
>>>>   def __init__(self,error):
>>>>   self.args = error
>>>> 
>>>> def a():
>>>>   try:
>>>>   fh = open("me.txt", "r")
>>>>   except Exception as (errno, errText):
>>>>   print errText
>>>>   try:
>>>>   b()
>>>>   except NetActiveError as (errono, errText):
>>>>   print errno, errText
>>>> 
>>>> def b():
>>>>   print "def b"
>>>>   raise NetActiveError,"net already running"
>>>> 
>>>> 
>>>> a()
>>>> 
>>>> 
>>>> When I run it though, I get the following error:
>>>> 
>>>> chare$ python z
>>>> No such file or directory
>>>> def b
>>>> Traceback (most recent call last):
>>>> File "z", line 20, in 
>>>>   a()
>>>> File "z", line 12, in a
>>>>   except NetActiveError as (errono, errText):
>>>> ValueError: too many values to unpack
>>>> 
>>>> 
>>>> What am I doing wrong here?
>>>> 
> 
> -- 
> http://mail.python.org/mailman/listinfo/python-list

okay - thanks for the tutorial -- you explained what I couldn't find in the 
docs I looked at.  I appreciate your help

-- 
http://mail.python.org/mailman/listinfo/python-list


sched() function questions

2010-08-06 Thread Chris Hare
I am currently using threading.timer to execute an event in my big chunk of 
code.  This is causing a problem with sqlite, so I am trying to figure out the 
sched function

import sched
import time

def timerfunc():
print "hello", time.time()
return(time.time())

def delay(period):
time.sleep(period)

def some():
s.enterabs(900,1, timerfunc, () )
s.run()

s = sched.scheduler(timerfunc, delay)

print time.time()
some()
x = 0
while 1:
print x
x = x + 1
time.sleep(60)
print str(s.queue())

What I am trying to do is mimic the Timer function, where my code will continue 
to function while my scheduled function executes in 15 minutes or 900 seconds.  
This doesn't do it though.  Any help?

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: sched() function questions

2010-08-07 Thread Chris Hare


On Aug 7, 2010, at 1:30 AM, Dennis Lee Bieber wrote:

> On Fri, 06 Aug 2010 22:37:26 -0500, Chris Hare 
> declaimed the following in gmane.comp.python.general:
> 
> 
>>print str(s.queue())
>> 
>   I don't find a queue method defined for scheduler objects in the
> documentation for my version of Python (2.5) 
> 
>> What I am trying to do is mimic the Timer function, where my code will 
>> continue to function while my scheduled function executes in 15 minutes or 
>> 900 seconds.  This doesn't do it though.  Any help?
> 
>   And what IS it doing? On my system, I'd expect the program to fail
> when trying to print whatever that queue() method is supposed to return.
> 
>   However, here is the key item you seem to have missed -- from the
> documentation:
> 
> -=-=-=-=-
> run( ) 
> 
> Run all scheduled events. This function will wait (using the delayfunc
> function passed to the constructor) for the next event, then execute it
> and so on until there are no more scheduled events. 
> -=-=-=-=-
> 
>   As soon as you call s.run() the entire PROGRAM goes into a wait
> state until the first of the queued events time expires. AND won't
> return until ALL events have happened.
> 
>   To have scheduled events happen asynchronously you will have to
> instantiate a THREAD which runs the scheduler... Of course, for your
> simple example, who needs the scheduler -- a simple sleep() in the
> thread will do what you attempted... The scheduler is useful when you
> want to queue a whole bunch of timed events and have them run in order
> at the set times... maybe even have events add more events to the
> system.
> -- 
>   Wulfraed Dennis Lee Bieber AF6VN
>wlfr...@ix.netcom.comHTTP://wlfraed.home.netcom.com/
> 
> -- 
> http://mail.python.org/mailman/listinfo/python-listThanks Dennis. 

I guess I will have to figure out how to resolve the sqlite error

-- 
http://mail.python.org/mailman/listinfo/python-list


Tk window and contents will not display

2010-08-14 Thread Chris Hare
The scenario is this:

I want to loop around all of the images in a given directory (which I know will 
be images, but I guess I should check), show an image in a window, wait 2 
seconds and show the next one and repeat that indefinitley, which will be until 
the user closes the window.

This is the code I extracted from the larger program and made work - sort of - 
in a standalone fashion.  When I run the code, each of the file names gets 
displayed, and I can view the images, so it has to be something I am doing 
wrong with this chunk of code.  

However, I don't see what the problem is.

from Tkinter import *
import time
import os
import ImageTk
import Image

class externalLoopDisplay:

def show(self):
#
# Create a frame
#
self.window = Tk()
self.f = Frame(self.window, bg="Gray")
self.f.grid()
self.btnRefresh = Button(self.f, text="Close", 
command=self.window.destroy, bg="Gray",highlightbackground="Red", 
highlightcolor="Green")
self.btnRefresh.grid(row=0, column=2)
self.loopImage()

def loopImage(self):
dir =  "Radar/net17"
while 1:
fileList = os.listdir(dir)
number = len(fileList)
c = 1
for gifFile in fileList:
print "externalLoopDisplay.show:","top of for loop " + str(c) + 
" of " + str(number)
print "externalLoopDisplay.show:","showing file "  + dir + "/" 
+ gifFile
self.window.title("Image " + str(c) + " of " + str(number))
image = Image.open(dir + "/" + gifFile)
canvasWidth, canvasHeight = image.size
self.w = Canvas(self.f, width=canvasWidth, height=canvasHeight)
photo = ImageTk.PhotoImage(image=image)
netRadarImage = Label(self.w, image=photo)
netRadarImage.image = photo
self.w.grid(row=1, column=0, columnspan=3)
netRadarImage.grid( row=1, column=0)
time.sleep(10)
c = c + 1
self.w.destroy()

loop=externalLoopDisplay()
loop.show()

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tk window and contents will not display

2010-08-14 Thread Chris Hare

On Aug 14, 2010, at 3:14 PM, Peter Otten wrote:

> Chris Hare wrote:
> 
>> The scenario is this:
>> 
>> I want to loop around all of the images in a given directory (which I know
>> will be images, but I guess I should check), show an image in a window,
>> wait 2 seconds and show the next one and repeat that indefinitley, which
>> will be until the user closes the window.
>> 
>> This is the code I extracted from the larger program and made work - sort
>> of - in a standalone fashion.  When I run the code, each of the file names
>> gets displayed, and I can view the images, so it has to be something I am
>> doing wrong with this chunk of code.
>> 
>> However, I don't see what the problem is.
> 
> I have not looked at your code in detail, but event loops and time.sleep() 
> don't play together very well. Use after(delay_in_milliseconds, callable) 
> instead. 
> 
> Here's a simple example that loops over images passed from the command line:
> 
> import Image
> import ImageTk
> import os
> import sys
> import Tkinter as tk
> 
> from itertools import cycle
> 
> def next_image():
>imagefile = next(imagefiles)
>image = Image.open(imagefile)
> 
>w, h = image.size
>image = image.resize((700, 700*h//w))
> 
>label.image = label["image"] = ImageTk.PhotoImage(image=image)
>root.title("Now showing %s" % os.path.basename(imagefile))
> 
>root.after(2000, next_image)
> 
> if __name__ == "__main__":
>imagefiles = sys.argv[1:]
>assert imagefiles
>imagefiles = cycle(imagefiles)
> 
>root = tk.Tk()
>label = tk.Label(root)
>label.pack()
> 
>root.after_idle(next_image)
>root.mainloop()
> 

Thanks Peter.  I threw away what I started with and merged your code into my 
class:

class externalLoopDisplay:

def show(self):
main.logging.debug("externalLoopDisplay.show:","start")

self.window = Tk()

self.btnClose = Button(self.window, text="Close", 
command=self.window.destroy, bg=backColor,highlightbackground=warnColor, 
highlightcolor=okColor)
self.btnClose.grid(row=0, column=2)
self.label = Label(self.window)
self.label.grid(row=1, column=0, columnspan=3)
dirName =  getRadarPath() + "/net" + str(netNumber.get()) # e.g. 
.../Radar/net17/net17-MMDDHHMMSS.gif
self.imagefiles = glob.glob(dirName + "/*.gif")
self.imagefiles = cycle(self.imagefiles)
self.window.after_idle(self.next_image)

def next_image(self):
imagefile = next(self.imagefiles)
image = Image.open(imagefile)

w, h = image.size
image = image.resize((600, 550*h//w))

self.label.image = self.label["image"] = 
ImageTk.PhotoImage(image=image) # < bails here
self.window.title("Now showing %s" % os.path.basename(imagefile))

self.window.after(2000, next_image)


I marked where the code bails with an error saying pyimage2 doesn't exist.  All 
of the images exist and worked just fine with your standalone script.

Suggestions?

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tk window and contents will not display

2010-08-14 Thread Chris Hare

On Aug 14, 2010, at 5:49 PM, Peter Otten wrote:

> Chris Hare wrote:
> 
>> Thanks Peter.  I threw away what I started with and merged your code into
>> my class:
>> 
>> class externalLoopDisplay:
>> 
>>def show(self):
>>main.logging.debug("externalLoopDisplay.show:","start")
>> 
>>self.window = Tk()
>> 
>>self.btnClose = Button(self.window, text="Close",
>>command=self.window.destroy,
>>bg=backColor,highlightbackground=warnColor,
>>highlightcolor=okColor) self.btnClose.grid(row=0, column=2)
>>self.label = Label(self.window) self.label.grid(row=1, column=0,
>>columnspan=3)
>>dirName =  getRadarPath() + "/net" + str(netNumber.get()) # e.g.
>>.../Radar/net17/net17-MMDDHHMMSS.gif
>> self.imagefiles = glob.glob(dirName + "/*.gif")
>> self.imagefiles = cycle(self.imagefiles)
>>self.window.after_idle(self.next_image)
>> 
>>def next_image(self):
>>imagefile = next(self.imagefiles)
>>image = Image.open(imagefile)
>> 
>>w, h = image.size
>>image = image.resize((600, 550*h//w))
>> 
>>self.label.image = self.label["image"] =
>>ImageTk.PhotoImage(image=image) # < bails here
>>self.window.title("Now showing %s" % os.path.basename(imagefile))
>> 
>>self.window.after(2000, next_image)
>> 
>> 
>> I marked where the code bails with an error saying pyimage2 doesn't exist.
>> All of the images exist and worked just fine with your standalone script.
>> 
>> Suggestions?
> 
> Google says you are calling Tkinter.Tk() more than once where you should 
> instead use Tkinter.Toplevel(). As you didn't post that part of the code 
> it's hard to verify, but when I add a second 
> 
> root = tk.Tk() 
> 
> to my example script I get a very similar exception:
> 
> Exception in Tkinter callback
> Traceback (most recent call last):
>  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
>return self.func(*args)
>  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 498, in callit
>func(*args)
>  File "cycle_image.py", line 16, in next_image
>label.image = label["image"] = ImageTk.PhotoImage(image=image)
>  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1212, in __setitem__
>self.configure({key: value})
>  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1205, in configure
>return self._configure('configure', cnf, kw)
>  File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1196, in _configure
>self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
> TclError: image "pyimage1" doesn't exist
> 
> By the way: for future posts please remember to cut and paste the traceback, 
> don't paraphrase the error message.
> 
> Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list

Yes - you are bang on.

Thanks.  One final question if I may, how would you suggest I handle checking 
for new files and adding them to the list?  For example, if the loop is playing 
and a new image is added, how can I detect it and then refresh the list of file?

I am stuck on that part with this new approach.

Chris

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Tk window and contents will not display

2010-08-14 Thread Chris Hare

On Aug 14, 2010, at 6:46 PM, Peter Otten wrote:

> Chris Hare wrote:
> 
>> 
>> On Aug 14, 2010, at 5:49 PM, Peter Otten wrote:
>> 
>>> Chris Hare wrote:
>>> 
>>>> Thanks Peter.  I threw away what I started with and merged your code
>>>> into my class:
>>>> 
>>>> class externalLoopDisplay:
>>>> 
>>>>   def show(self):
>>>>   main.logging.debug("externalLoopDisplay.show:","start")
>>>> 
>>>>   self.window = Tk()
>>>> 
>>>>   self.btnClose = Button(self.window, text="Close",
>>>>   command=self.window.destroy,
>>>>   bg=backColor,highlightbackground=warnColor,
>>>>   highlightcolor=okColor) self.btnClose.grid(row=0, column=2)
>>>>   self.label = Label(self.window) self.label.grid(row=1, column=0,
>>>>   columnspan=3)
>>>>   dirName =  getRadarPath() + "/net" + str(netNumber.get()) # e.g.
>>>>   .../Radar/net17/net17-MMDDHHMMSS.gif
> 
>> Thanks.  One final question if I may, how would you suggest I handle
>> checking for new files and adding them to the list?  For example, if the
>> loop is playing and a new image is added, how can I detect it and then
>> refresh the list of file?
>> 
>> I am stuck on that part with this new approach.
>> 
>> Chris
> 
> Replacing
> 
>>>> self.imagefiles = glob.glob(dirName + "/*.gif")
>>>> self.imagefiles = cycle(self.imagefiles)
> 
> with
> 
> self.imagefiles = image_cycler(os.path.join(dirname, "*.gif"))
> 
> where image_cycler() looks as follows
> 
> def image_cycler(pattern):
>while True:
>for fn in glob.glob(pattern):
>yield fn
> 
> would be the simplest way.
> 
> Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list

Perfect!

Thank you

-- 
http://mail.python.org/mailman/listinfo/python-list


adding a "windows" item to a menu bar dynamically

2010-08-15 Thread Chris Hare
I want to add a "Windows" menu item to my menu bar, so when another Toplevel 
window is opened, I can add that to the menu bar in case the user accidentally 
clicks on a different window and moves the Toplevel under something else.

Then when the window is closed, remove the window from the menu 

Any ideas on how to do this?

Thanks

-- 
http://mail.python.org/mailman/listinfo/python-list


python strings and {} in Tkinter entry widgets

2010-08-15 Thread Chris Hare
I have some code that pulls a value from a database.  In this case, it is three 
space delimited words.  When I display the value in a Tkinter.Entry widget, the 
text has curly braces around it, even when there are none in the surrounding 
the text in the database. 

Is this normal, and how do I prevent it or remove them correctly before 
displaying the text in the Entry widget?

Thanks
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: python strings and {} in Tkinter entry widgets

2010-08-16 Thread Chris Hare

On Aug 16, 2010, at 11:40 AM, Jeff Hobbs wrote:

> On Aug 15, 4:41 pm, Chris Hare  wrote:
>> I have some code that pulls a value from a database.  In this case, it is 
>> three space delimited words.  When I display the value in a Tkinter.Entry 
>> widget, the text has curly braces around it, even when there are none in the 
>> surrounding the text in the database.
>> 
>> Is this normal, and how do I prevent it or remove them correctly before 
>> displaying the text in the Entry widget?
> 
> Python ['', '', ''] == Tcl {{} {} {}}
> Python 'a word' == Tcl {a word}
> 
> You are getting a literal translation occurring, and you need to split/
> join or index the items properly.  Without being more clear how you
> want to represent your data, what you need isn't clear.  Perhaps you
> just need to reference the first index of the variable, or ... who
> knows, there are lots of possibilities.
> 
> Jeff
> -- 
> http://mail.python.org/mailman/listinfo/python-list

Actually I want all of the words, as they form the name of an organization 
entered by the user.  So the space delimited words should be displayed without 
the {} in the tkinker entry box.  The contents of the widget is a persons first 
and last name, space delimited
-- 
http://mail.python.org/mailman/listinfo/python-list