cpython: 0fb515063324 (original) (raw)
--- a/Lib/turtledemo/main.py +++ b/Lib/turtledemo/main.py @@ -41,74 +41,47 @@ def showAboutTurtle(): class DemoWindow(object):
- def init(self, filename=None): self.root = root = turtle._root = Tk()
root.title('Python turtle-graphics examples')[](#l1.10) root.wm_protocol("WM_DELETE_WINDOW", self._destroy)[](#l1.11)
#################[](#l1.13)
root.grid_rowconfigure(1, weight=1)[](#l1.14)
root.grid_columnconfigure(0, weight=1)[](#l1.15)
root.grid_columnconfigure(1, minsize=90, weight=1)[](#l1.16)
root.grid_columnconfigure(2, minsize=90, weight=1)[](#l1.17)
root.grid_columnconfigure(3, minsize=90, weight=1)[](#l1.18)
+ self.mBar = Frame(root, relief=RAISED, borderwidth=2)
self.mBar.pack(fill=X)[](#l1.21)
- self.ExamplesBtn = self.makeLoadDemoMenu() self.OptionsBtn = self.makeHelpMenu()
self.mBar.tk_menuBar(self.ExamplesBtn, self.OptionsBtn) #, QuitBtn)[](#l1.25)
self.mBar.tk_menuBar(self.ExamplesBtn, self.OptionsBtn)[](#l1.26)
self.mBar.grid(row=0, columnspan=4, sticky='news')[](#l1.27)
pane = PanedWindow(orient=HORIZONTAL, sashwidth=5,[](#l1.29)
sashrelief=SOLID, bg='#ddd')[](#l1.30)
pane.add(self.makeTextFrame(pane))[](#l1.31)
pane.add(self.makeGraphFrame(pane))[](#l1.32)
pane.grid(row=1, columnspan=4, sticky='news')[](#l1.33)
root.title('Python turtle-graphics examples')[](#l1.35)
#################[](#l1.36)
self.left_frame = left_frame = Frame(root)[](#l1.37)
self.text_frame = text_frame = Frame(left_frame)[](#l1.38)
self.vbar = vbar =Scrollbar(text_frame, name='vbar')[](#l1.39)
self.text = text = Text(text_frame,[](#l1.40)
name='text', padx=5, wrap='none',[](#l1.41)
width=45)[](#l1.42)
vbar['command'] = text.yview[](#l1.43)
vbar.pack(side=LEFT, fill=Y)[](#l1.44)
#####################[](#l1.45)
self.hbar = hbar =Scrollbar(text_frame, name='hbar', orient=HORIZONTAL)[](#l1.46)
hbar['command'] = text.xview[](#l1.47)
hbar.pack(side=BOTTOM, fill=X)[](#l1.48)
#####################[](#l1.49)
text['yscrollcommand'] = vbar.set[](#l1.50)
text.config(font=txtfont)[](#l1.51)
text.config(xscrollcommand=hbar.set)[](#l1.52)
text.pack(side=LEFT, fill=Y, expand=1)[](#l1.53)
#####################[](#l1.54)
self.output_lbl = Label(left_frame, height= 1,text=" --- ", bg = "#ddf",[](#l1.55)
font = ("Arial", 16, 'normal'))[](#l1.56)
self.output_lbl.pack(side=BOTTOM, expand=0, fill=X)[](#l1.57)
#####################[](#l1.58)
text_frame.pack(side=LEFT, fill=BOTH, expand=0)[](#l1.59)
left_frame.pack(side=LEFT, fill=BOTH, expand=0)[](#l1.60)
self.graph_frame = g_frame = Frame(root)[](#l1.61)
self.output_lbl = Label(root, height= 1, text=" --- ", bg="#ddf",[](#l1.62)
font=("Arial", 16, 'normal'), borderwidth=2,[](#l1.63)
relief=RIDGE)[](#l1.64)
self.start_btn = Button(root, text=" START ", font=btnfont,[](#l1.65)
fg="white", disabledforeground = "#fed",[](#l1.66)
command=self.startDemo)[](#l1.67)
self.stop_btn = Button(root, text=" STOP ", font=btnfont,[](#l1.68)
fg="white", disabledforeground = "#fed",[](#l1.69)
command=self.stopIt)[](#l1.70)
self.clear_btn = Button(root, text=" CLEAR ", font=btnfont,[](#l1.71)
fg="white", disabledforeground="#fed",[](#l1.72)
command = self.clearCanvas)[](#l1.73)
self.output_lbl.grid(row=2, column=0, sticky='news', padx=(0,5))[](#l1.74)
self.start_btn.grid(row=2, column=1, sticky='ew')[](#l1.75)
self.stop_btn.grid(row=2, column=2, sticky='ew')[](#l1.76)
self.clear_btn.grid(row=2, column=3, sticky='ew')[](#l1.77)
turtle._Screen._root = g_frame[](#l1.79)
turtle._Screen._canvas = turtle.ScrolledCanvas(g_frame, 800, 600, 1000, 800)[](#l1.80)
#xturtle.Screen._canvas.pack(expand=1, fill="both")[](#l1.81)
self.screen = _s_ = turtle.Screen()[](#l1.82)
turtle.TurtleScreen.__init__(_s_, _s_._canvas)[](#l1.84)
self.scanvas = _s_._canvas[](#l1.86)
#xturtle.RawTurtle.canvases = [self.scanvas][](#l1.87)
turtle.RawTurtle.screens = [_s_][](#l1.88)
self.scanvas.pack(side=TOP, fill=BOTH, expand=1)[](#l1.90)
self.btn_frame = btn_frame = Frame(g_frame, height=100)[](#l1.92)
self.start_btn = Button(btn_frame, text=" START ", font=btnfont, fg = "white",[](#l1.93)
disabledforeground = "#fed", command=self.startDemo)[](#l1.94)
self.start_btn.pack(side=LEFT, fill=X, expand=1)[](#l1.95)
self.stop_btn = Button(btn_frame, text=" STOP ", font=btnfont, fg = "white",[](#l1.96)
disabledforeground = "#fed", command = self.stopIt)[](#l1.97)
self.stop_btn.pack(side=LEFT, fill=X, expand=1)[](#l1.98)
self.clear_btn = Button(btn_frame, text=" CLEAR ", font=btnfont, fg = "white",[](#l1.99)
disabledforeground = "#fed", command = self.clearCanvas)[](#l1.100)
self.clear_btn.pack(side=LEFT, fill=X, expand=1)[](#l1.101)
self.btn_frame.pack(side=TOP, fill=BOTH, expand=0)[](#l1.103)
self.graph_frame.pack(side=TOP, fill=BOTH, expand=1)[](#l1.104)
Percolator(text).insertfilter(ColorDelegator())[](#l1.106)
Percolator(self.text).insertfilter(ColorDelegator())[](#l1.107) self.dirty = False[](#l1.108) self.exitflag = False[](#l1.109) if filename:[](#l1.110)
@@ -117,9 +90,46 @@ class DemoWindow(object): "Choose example from menu", "black") self.state = STARTUP
- def onResize(self, event):
cwidth = self._canvas.winfo_width()[](#l1.120)
cheight = self._canvas.winfo_height()[](#l1.121)
self._canvas.xview_moveto(0.5*(self.canvwidth-cwidth)/self.canvwidth)[](#l1.122)
self._canvas.yview_moveto(0.5*(self.canvheight-cheight)/self.canvheight)[](#l1.123)
- def makeTextFrame(self, root):
self.text_frame = text_frame = Frame(root)[](#l1.126)
self.text = text = Text(text_frame, name='text', padx=5,[](#l1.127)
wrap='none', width=45)[](#l1.128)
self.vbar = vbar = Scrollbar(text_frame, name='vbar')[](#l1.130)
vbar['command'] = text.yview[](#l1.131)
vbar.pack(side=LEFT, fill=Y)[](#l1.132)
self.hbar = hbar = Scrollbar(text_frame, name='hbar', orient=HORIZONTAL)[](#l1.133)
hbar['command'] = text.xview[](#l1.134)
hbar.pack(side=BOTTOM, fill=X)[](#l1.135)
text['font'] = txtfont[](#l1.137)
text['yscrollcommand'] = vbar.set[](#l1.138)
text['xscrollcommand'] = hbar.set[](#l1.139)
text.pack(side=LEFT, fill=BOTH, expand=1)[](#l1.140)
return text_frame[](#l1.141)
- def makeGraphFrame(self, root):
turtle._Screen._root = root[](#l1.144)
self.canvwidth = 1000[](#l1.145)
self.canvheight = 800[](#l1.146)
turtle._Screen._canvas = self._canvas = canvas = turtle.ScrolledCanvas([](#l1.147)
root, 800, 600, self.canvwidth, self.canvheight)[](#l1.148)
canvas.adjustScrolls()[](#l1.149)
canvas._rootwindow.bind('<Configure>', self.onResize)[](#l1.150)
canvas._canvas['borderwidth'] = 0[](#l1.151)
self.screen = _s_ = turtle.Screen()[](#l1.153)
turtle.TurtleScreen.__init__(_s_, _s_._canvas)[](#l1.154)
self.scanvas = _s_._canvas[](#l1.155)
turtle.RawTurtle.screens = [_s_][](#l1.156)
return canvas[](#l1.157)
def configGUI(self, menu, start, stop, clear, txt="", color="blue"): self.ExamplesBtn.config(state=menu) @@ -145,9 +155,9 @@ class DemoWindow(object): self.output_lbl.config(text=txt, fg=color) - def makeLoadDemoMenu(self):
CmdBtn = Menubutton(self.mBar, text='Examples', underline=0, font=menufont)[](#l1.167)
CmdBtn = Menubutton(self.mBar, text='Examples',[](#l1.168)
underline=0, font=menufont)[](#l1.169) CmdBtn.pack(side=LEFT, padx="2m")[](#l1.170) CmdBtn.menu = Menu(CmdBtn)[](#l1.171)
@@ -180,7 +190,6 @@ class DemoWindow(object): def refreshCanvas(self): if not self.dirty: return self.screen.clear()
#self.screen.mode("standard")[](#l1.177) self.dirty=False[](#l1.178)
def loadfile(self, filename): @@ -238,10 +247,13 @@ class DemoWindow(object): self.configGUI(NORMAL, NORMAL, DISABLED, DISABLED, "STOPPED!", "red") turtle.TurtleScreen._RUNNING = False
#print "stopIT: exitflag = True"[](#l1.185) else:[](#l1.186) turtle.TurtleScreen._RUNNING = False[](#l1.187)
#print "stopIt: exitflag = False"[](#l1.188)
+ if name == 'main': demo = DemoWindow()
--- a/Misc/ACKS +++ b/Misc/ACKS @@ -662,6 +662,7 @@ Kurt B. Kaiser Tamito Kajiyama Jan Kaliszewski Peter van Kampen +Jan Kanis Rafe Kaplan Jacob Kaplan-Moss Janne Karila