For this exercise, you will write an image viewer. Here is a simple example:
g = Gui() canvas = g.ca(width=300) photo = PhotoImage(file='danger.gif') canvas.image([0,0], image=photo) g.mainloop()
PhotoImage reads a file and returns a
PhotoImage object that Tkinter can display.
Canvas.image puts the image on the canvas, centered on the given coordinates. You can also put images on labels, buttons, and some other widgets:
PhotoImage can only handle a few image formats, like GIF and PPM, but we can use the Python Imaging Library (PIL) to read other files.
The name of the PIL module is
Image, but Tkinter defines an object with the same name. To avoid the conflict, you can use
import...as like this:
import Image as PIL import ImageTk
The first line imports
Image and gives it the local name
PIL. The second line imports
ImageTk, which can translate a PIL image into a Tkinter PhotoImage. Here’s an example:
image = PIL.open('allen.png') photo2 = ImageTk.PhotoImage(image) g.la(image=photo2)
allen.pngfrom http://thinkpython.com/code. Run
image_demo.py. You might have to install
ImageTk. They are probably in your software repository, but if not you can get them from http://pythonware.com/products/pil.
- The problem is that when you reassign
photoit overwrites the reference to the first PhotoImage, which then disappears. The same thing happens if you assign a PhotoImage to a local variable; it disappears when the function ends.
To avoid this problem, you have to store a reference to each PhotoImage you want to keep. You can use a global variable, or store PhotoImages in a data structure or as an attribute of an object.
This behavior can be frustrating, which is why I am warning you (and why the example image says “Danger!”).
- When the user clicks on the image, the program should display the next one.
- PIL provides a variety of methods for manipulating images. You can read about them at http://pythonware.com/library/pil/handbook. As a challenge, choose a few of these methods and provide a GUI for applying them to images.
A vector graphics editor is a program that allows users to draw and edit shapes on the screen and generate output files in vector graphics formats like Postscript and SVG.
Write a simple vector graphics editor using Tkinter. At a minimum, it should allow users to draw lines, circles and rectangles, and it should use
Canvas.dump to generate a Postscript description of the contents of the Canvas.
As a challenge, you could allow users to select and resize items on the Canvas.
Use Tkinter to write a basic web browser. It should have a Text widget where the user can enter a URL and a Canvas to display the contents of the page.
At a minimum your browser should handle plain text and hyperlinks. As a challenge you could handle background colors, text formatting tags and images.