Rapid GUI Programming with Python and Qt
Errata

ISBN-10: 0132354187  – ISBN-13: 978-0132354189
Errata for All Printings
Issue Resolution Reporter
The imagechanger.pyw application works correctly, but segfaults on termination on 32-bit Linux platforms.This is due to a 32-bit Linux-specific PyQt bug that does not affect the operation of the program. This is fixed in PyQt 4.3.1. Author
Page 3. The license information has changed. For open source applications there is no change: you can use the open source editions of PyQt and Qt under the GPL. But if you want to use PyQt to create commercial applications you must have a commercial PyQt license and a commercial Qt license—unless you use Qt 4.5 or later in which case you must have a commercial PyQt license and must either buy a commercial Qt license or use a (free of charge) LGPL edition of Qt. Author
Pages 46, 49, 50, 55, 66, and 76. Indentation in the syntax illustrations is 2 spaces instead of 4. These are just typesetting mistakes. All the code quoted in the book and all the examples and solutions use 4 spaces as the Python guidelines recommend. Author
Pages 92-99. The OrderedDict class's name is wrong. In Python terminology an "ordered dict" is an insertion order dictionary, whereas a "sorted dict" is a key ordered dictionary. Since OrderedDict is key ordered it should be called SortedDict to be terminologically correct. (I used C++ terminology by mistake.) The class works fine though. I've put a sorteddict module, which is theoretically slower but with a more flexible API, on PyPI. (Another implementation, SortedDict, is provided with the examples for Programming in Python 3.) Author
Page 95. Subtle bug. The implementation of the __delitem__() method has a subtle bug. Replace the method as follows:
def __delitem__(self, key):
    del self.__dict[key]
    i = bisect.bisect_left(self.__keys, key)
    del self.__keys[i]
The code has been corrected in the archives.
Rick Morra
Page 148. Bug in numbers.pyw example. The numbers.pyw example has a bug that means it displays numbers incorrectly. The erroneous code is not quoted in the book, but its effect is visible in Figure 5.3. The tarball and zip now have a fixed version of numbers.pyw. Peter Hageman
Page 181. Code error. In the code snippet at the top of this page change editToolBar to self.imageLabel. Karl Gohl
Pages 288/9. The updateWindowMenu() and raiseWindow() methods are easy to understand but naive. The file sditexteditor2.pyw has more sophisticated versions of these methods as explained in README.txt.Author
Page 301. Improved solution to exercise. I improved the logic for the tabbededitor.pyw solution in the Python 2.6 and 3 archives. I also fixed a bug in naming the tabs when new files are created or when file save as is used. Nankun Huang
Page 311. Two blank lines instead of one separate a paragraph from a code snippet on this page. There's nothing missing, so just ignore the blank space. (I made a mistake when I typeset this page.) Author
Page 386. The PythonHighlighter syntax highlighting class is easy to understand but naive. The file pythoneditor2.pyw has a more sophisticated PythonHighlighter class that covers more corner-cases at the cost of being a bit more complex and a bit slower. The Sandbox (Sandbox at PyPI) application has a slightly better and slightly slower version of the class. Author
Errata for the First Printing only (additional to the errata above—these are all fixed in the Second and subsequent printings)
Issue Resolution Reporter
Page 17. Incorrect forward reference. The forward reference to Chapter 4 should be to Chapter 3. Burkhard Lück
Page 19. Bad hypenation. Namespace is hypenated as names-pace instead of name-space. Lorenz Quack and Steve Shortess
Page 30. Typo in the penultimate paragraph. In the paragraph beginning "Now we have changed the names tuple...", change names[:1] to names[:2]. Giovanni Cavallin
Page 33. Missing item from list. All the fruit lists shown at the bottom of this page should have 'Pear' in front of 'Quince'. Mark M. Henwood
Page 51. Incorrect variable name in code snippet. In the first code snippet change print president, presidents[key] to print key, presidents[key]. Chris O'Halloran
Page 73. Poorly specified exercise. In Exercise 2 change the text ``For every lowercase character in text'' to ``For every character in a lowercased copy of text''. Oleksandr Moskalenko
Page 82. Although the __cmp__() method works as written, it doesn't take advantage of the fact that area is a property. Change the return line to:
    return cmp(self.area, other.area)
This correction has been made to the example source code.
Ralph Wagner
Page 96. Missing period The period is missing from the end of the first sentence of the second paragraph. Kazuyoshi Furutaka
Page 117. Incorrect word. In the last line of the paragraph below the screenshot change the word "encodings" to the phrase "character sets". Erik Dalén
Page 126. Incorrect word. Change the last word in the second paragraph from ``readlines()'' to the phrase, ``the file handle as an iterable'' (Kurt Welgehausen also suggested an improvement to the code shown on page 125—this is now in the tarball and zip file.) Kurt Welgehausen
Page 162. Typo in the first sentence of the Summary. Change "showned" to "showed". Lorenz Quack
Page 163. Poor solution to exercise. The solution in the archives has been improved by removing some redundant lines and by rewriting the up() and down() methods. Alexander Kanevskiy and Oleksandr Moskalenko
Pages 333 and 460. Two blank lines instead of one separate a paragraph from a code snippet on each of these pages. There's nothing missing, so just ignore the blank space. (I made a mistake when I typeset these pages.) Author
Page 403. Typo in the first code snippet. Replace page-break-after=always; with page-break-after:always;. This is now fixed in printing.pyw's source code, and gives proper page breaks but it also outputs an extra blank page at the end. A new version, printing2.pyw has been added to the source code with this fix and improved code so that no spurious blank page is output. It also puts the footer that appears when using QPainter a bit lower. Benno Dielmann
Page 463. Workaround for Qt <= 4.3.3/SQLite bug. The QTableView showing the log records sometimes shows spurious blank rows when using SQLite; the workaround is to add the line self.logModel.reset() just before the select() call. (The workaround was provided by Sibylle Koczian and is now in the tarball and zip file.) Sibylle Koczian
Page 465. Missing : in code snippet. In the page's main code snippet there's a colon missing after if not QSqlDatabase.database().commit(). Carla Paredes
Page 615. Misplaced gzip module index entry. This entry appears at the end of the `Q's instead of the end of the `G's on page 596 (i.e., it was filed as "qzip" instead of "gzip"). Robert Withrow
Copyright © 2006-10 Qtrac Ltd. All Rights Reserved.