Created on 2014-08-08 01:27 by Kent.D..Lee, last changed 2014-09-14 07:05 by ned.deily. This issue is now closed.
This is either a turtle graphics or tkinter problem.
In Python 3.4 it appears that something in Turtle Graphics broke or at least changed. I get the following error when trying to run a program that works in Python 3.1 and 3.2.
Kent's Mac> python3.4 c4.py
Traceback (most recent call last):
File "c4.py", line 283, in <module>
main()
File "c4.py", line 277, in main
animApp = Connect4Application(root)
File "c4.py", line 110, in __init__
self.buildWindow()
File "c4.py", line 129, in buildWindow
theTurtle = turtle.RawTurtle(canvas)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/turtle.py", line 2534, in __init__
self.screen = TurtleScreen(canvas)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/turtle.py", line 1000, in __init__
cv._rootwindow.call('wm', 'attributes', '.', '-topmost', '1')
AttributeError: 'Canvas' object has no attribute '_rootwindow'
Kent's Mac>
The code is attached. The error occurs on line 129 when trying to create a RawTurtle and provide it with a Canvas.
It looks like the changes associated with Issue11571, released in 3.4.1, cause this problem when the program supplies its own Canvas object rather than relying on the turtle module to create a default one.
As a temporary workaround, you could edit turtle.py to revert that change, in other words, just search for and delete the whole "if sys.platform == 'darwin'" test: diff -r d85fcf23549e Lib/turtle.py --- a/Lib/turtle.py Tue Aug 05 14:02:11 2014 -0500 +++ b/Lib/turtle.py Thu Aug 07 19:58:25 2014 -0700 @@ -993,12 +993,6 @@ self._colormode = _CFG["colormode"] self._keys = [] self.clear() - if sys.platform == 'darwin': - # Force Turtle window to the front on OS X. This is needed because - # the Turtle window will show behind the Terminal window when you - # start the demo from the command line. - cv._rootwindow.call('wm', 'attributes', '.', '-topmost', '1') - cv._rootwindow.call('wm', 'attributes', '.', '-topmost', '0') def clear(self): """Delete all drawings and all turtles from the TurtleScreen. The file is at /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/turtle.py.
The attached patch should prevent the AttributeError exception when not using a default Canvas. I now think the overall approach introduced in Issue11571 is not the best. I plan to commit this fix for now but encourage more robust solutions in the long term.
The changesets below should prevent the problem in 3.4.2 and 3.5.0. Since there are no standard tests for turtle at the moment, there is no testcase for using a non-default Canvas but one should be added when turtle tests are (Issue21914 and Issue21916). New changset fac17d06e01d by Ned Deily in branch '3.4': Issue #22168: Prevent turtle AttributeError with non-default Canvas on OS X. https://hg.python.org/cpython/rev/fac17d06e01d New changeset 775453a7b85d by Ned Deily in branch 'default': Issue #22168: Prevent turtle AttributeError with non-default Canvas on OS X. https://hg.python.org/cpython/rev/775453a7b85d
stage: patch review -> resolved
stage: needs patch -> patch review
messages: + msg225053
assignee: ned.deily
stage: needs patch