Skip to content

Commit

Permalink
Rewrite the turtledemo makeGraphFrame method (#104224)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
terryjreedy committed May 6, 2023
1 parent e407661 commit 96f95df
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions Lib/turtledemo/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,10 @@ def __init__(self, filename=None):


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)
Expand Down Expand Up @@ -237,19 +237,23 @@ def makeTextFrame(self, root):
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):
Expand Down Expand Up @@ -373,7 +377,7 @@ def startDemo(self):
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):
Expand Down

0 comments on commit 96f95df

Please sign in to comment.