diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2023-05-06 15:09:08 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-06 15:09:08 (GMT) |
commit | 96f95df48e41ccf984de1ee1312c81809fd9e876 (patch) | |
tree | 64b352aa5fd50c36b12b59a67ca6c2330539aad9 | |
parent | e407661e7a70ad49a69df3058634bc4fccebbcd6 (diff) | |
download | cpython-96f95df48e41ccf984de1ee1312c81809fd9e876.zip cpython-96f95df48e41ccf984de1ee1312c81809fd9e876.tar.gz cpython-96f95df48e41ccf984de1ee1312c81809fd9e876.tar.bz2 |
Rewrite the turtledemo makeGraphFrame method (#104224)
Replace `self._canvas` and `self.scanvas`, both bound to `canvas`,
with `self.canvas, which is accessed in other methods.
Replace `_s_` with `screen` and `_s_._canvas` with `canvas`.
Add a comment explaining the unorthodox use of
function turtle.Screen and singleton class turtle._Screen.
-rwxr-xr-x | Lib/turtledemo/__main__.py | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/Lib/turtledemo/__main__.py b/Lib/turtledemo/__main__.py index caea022..f6c9d6a 100755 --- a/Lib/turtledemo/__main__.py +++ b/Lib/turtledemo/__main__.py @@ -203,10 +203,10 @@ class DemoWindow(object): def onResize(self, event): - cwidth = self._canvas.winfo_width() - cheight = self._canvas.winfo_height() - self._canvas.xview_moveto(0.5*(self.canvwidth-cwidth)/self.canvwidth) - self._canvas.yview_moveto(0.5*(self.canvheight-cheight)/self.canvheight) + cwidth = self.canvas.winfo_width() + cheight = self.canvas.winfo_height() + self.canvas.xview_moveto(0.5*(self.canvwidth-cwidth)/self.canvwidth) + self.canvas.yview_moveto(0.5*(self.canvheight-cheight)/self.canvheight) def makeTextFrame(self, root): self.text_frame = text_frame = Frame(root) @@ -237,19 +237,23 @@ class DemoWindow(object): return text_frame def makeGraphFrame(self, root): + # t._Screen is a singleton class instantiated or retrieved + # by calling Screen. Since tdemo canvas needs a different + # configuration, we manually set class attributes before + # calling Screen and manually call superclass init after. turtle._Screen._root = root + self.canvwidth = 1000 self.canvheight = 800 - turtle._Screen._canvas = self._canvas = canvas = turtle.ScrolledCanvas( + turtle._Screen._canvas = self.canvas = canvas = turtle.ScrolledCanvas( root, 800, 600, self.canvwidth, self.canvheight) canvas.adjustScrolls() canvas._rootwindow.bind('<Configure>', self.onResize) canvas._canvas['borderwidth'] = 0 - self.screen = _s_ = turtle.Screen() - turtle.TurtleScreen.__init__(_s_, _s_._canvas) - self.scanvas = _s_._canvas - turtle.RawTurtle.screens = [_s_] + self.screen = screen = turtle.Screen() + turtle.TurtleScreen.__init__(screen, canvas) + turtle.RawTurtle.screens = [screen] return canvas def set_txtsize(self, size): @@ -373,7 +377,7 @@ class DemoWindow(object): def clearCanvas(self): self.refreshCanvas() self.screen._delete("all") - self.scanvas.config(cursor="") + self.canvas.config(cursor="") self.configGUI(NORMAL, DISABLED, DISABLED) def stopIt(self): |