From: Chris Hare on

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)
From: rantingrick on
On Aug 1, 7:35 am, Chris Hare <ch...(a)labr.net> 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.
From: Chris Hare on

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

> On Aug 1, 7:35 am, Chris Hare <ch...(a)labr.net> 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)

From: Peter Otten on
Chris Hare wrote:


> On Aug 1, 2010, at 10:24 AM, rantingrick wrote:
>
>> On Aug 1, 7:35 am, Chris Hare <ch...(a)labr.net> 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 "<stdin>", line 1, in <module>
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
From: Chris Hare on

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 <ch...(a)labr.net> 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 "<stdin>", line 1, in <module>
> 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 <module>
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 "<Image.Image image mode=P size=450x412 at 0x1016095A8>" 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?