This page intentionally left blank Python for Software Design



tải về 1.38 Mb.
Chế độ xem pdf
trang78/83
Chuyển đổi dữ liệu13.08.2023
Kích1.38 Mb.
#55046
1   ...   75   76   77   78   79   80   81   82   83
- Python for Software Design How to Think Like a Computer Scientist-Cambridge University Press (2009)

19.10
GLOSSARY
binding: An association between a widget, an event, and an event handler. The event
handler is called when the the event occurs in the widget.
bound method: A method associated with a particular instance.
bounding box: A rectangle that encloses a set of items, usually specified by two
opposing corners.
callback: A function associated with a widget that is called when the user performs
an action.
event: A user action, like a mouse click or key press, that causes a GUI to respond.
event-driven programming: A style of programming in which the flow of execution
is determined by user actions.
event loop: An infinite loop that waits for user actions and responds.
geometry manager: A system for packing widgets.
GUI: A graphical user interface.
item: A graphical element on a Canvas widget.
keyword argument: An argument that indicates the parameter name as part of the
function call.


228
Case Study: Tkinter
option: A value that controls the appearance or function of a widget.
pack: To arrange and display the elements of a GUI.
widget: One of the elements that makes up a GUI, including buttons, menus, text
entry fields, etc.
19.11
EXERCISES
Exercise 19.4
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:
g.la(image=photo)
g.bu(image=photo)
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)


19.11 Exercises
229
(1) Download image_demo.py, danger.gif and allen.png from thinkpython.
com/code
. Run image_demo.py. You might have to install PIL and ImageTk.
They are probably in your software repository, but if not you can get them
from pythonware.com/products/pil/.
(2) In image_demo.py change the name of the second PhotoImage from photo2
to photo and run the program again. You should see the second PhotoImage
but not the first.
The problem is that when you reassign photo it 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!”).
(3) Starting with this example, write a program that takes the name of a directory
and loops through all the files, displaying any files that PIL recognizes as
images. You can use a try statement to catch the files PIL doesn’t recognize.
When the user clicks on the image, the program should display the next one.
(4) PIL provides a variety of methods for manipulating images. You can read
about them at pythonware.com/library/pil/handbook. As a challenge,
choose a few of these methods and provide a GUI for applying them to images.
You can download a simple solution from thinkpython.com/code/ImageBrowser.py.
Exercise 19.5
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.
Exercise 19.6
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.
You can use the urllib module to download files (see Exercise 14.5) and
the HTMLParser module to parse the HTML tags (see docs.python.org/lib/
module-HTMLParser.html
).
At a minimum your browser should handle plain text and hyperlinks. As a challenge
you could handle background colors, text formatting tags, and images.

See wikipedia.org/wiki/Vector_graphics_editor.




tải về 1.38 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   75   76   77   78   79   80   81   82   83




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương