Kaydet (Commit) 7e55db2b authored tarafından Terry Jan Reedy's avatar Terry Jan Reedy

Issue #17172: Add the ability to run turtledemo from Idle.

Make turtledemo start as active on Mac even when run with subprocess.
Patch by Ramchandra Apt, Lita Cho, and Ned Daily.
üst c61c170b
...@@ -8,6 +8,8 @@ the PythonShell window, and a Format menu which is only present in the Editor ...@@ -8,6 +8,8 @@ the PythonShell window, and a Format menu which is only present in the Editor
windows. windows.
""" """
from importlib.util import find_spec
from idlelib.configHandler import idleConf from idlelib.configHandler import idleConf
# Warning: menudefs is altered in macosxSupport.overrideRootMenu() # Warning: menudefs is altered in macosxSupport.overrideRootMenu()
...@@ -86,4 +88,7 @@ menudefs = [ ...@@ -86,4 +88,7 @@ menudefs = [
]), ]),
] ]
if find_spec('turtledemo'):
menudefs[-1][1].append(('Turtle Demo', '<<open-turtle-demo>>'))
default_keydefs = idleConf.GetCurrentKeySet() default_keydefs = idleConf.GetCurrentKeySet()
...@@ -222,6 +222,7 @@ class EditorWindow(object): ...@@ -222,6 +222,7 @@ class EditorWindow(object):
text.bind("<<close-all-windows>>", self.flist.close_all_callback) text.bind("<<close-all-windows>>", self.flist.close_all_callback)
text.bind("<<open-class-browser>>", self.open_class_browser) text.bind("<<open-class-browser>>", self.open_class_browser)
text.bind("<<open-path-browser>>", self.open_path_browser) text.bind("<<open-path-browser>>", self.open_path_browser)
text.bind("<<open-turtle-demo>>", self.open_turtle_demo)
self.set_status_bar() self.set_status_bar()
vbar['command'] = text.yview vbar['command'] = text.yview
...@@ -705,6 +706,14 @@ class EditorWindow(object): ...@@ -705,6 +706,14 @@ class EditorWindow(object):
from idlelib import PathBrowser from idlelib import PathBrowser
PathBrowser.PathBrowser(self.flist) PathBrowser.PathBrowser(self.flist)
def open_turtle_demo(self, event = None):
import subprocess
cmd = [sys.executable,
'-c',
'from turtledemo.__main__ import main; main()']
p = subprocess.Popen(cmd, shell=False)
def gotoline(self, lineno): def gotoline(self, lineno):
if lineno is not None and lineno > 0: if lineno is not None and lineno > 0:
self.text.mark_set("insert", "%d.0" % lineno) self.text.mark_set("insert", "%d.0" % lineno)
......
...@@ -40,6 +40,22 @@ class DemoWindow(object): ...@@ -40,6 +40,22 @@ class DemoWindow(object):
root.title('Python turtle-graphics examples') root.title('Python turtle-graphics examples')
root.wm_protocol("WM_DELETE_WINDOW", self._destroy) root.wm_protocol("WM_DELETE_WINDOW", self._destroy)
if sys.platform == 'darwin':
import subprocess
# Make sure we are the currently activated OS X application
# so that our menu bar appears.
p = subprocess.Popen(
[
'osascript',
'-e', 'tell application "System Events"',
'-e', 'set frontmost of the first process whose '
'unix id is {} to true'.format(os.getpid()),
'-e', 'end tell',
],
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
root.grid_rowconfigure(1, weight=1) root.grid_rowconfigure(1, weight=1)
root.grid_columnconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, minsize=90, weight=1) root.grid_columnconfigure(1, minsize=90, weight=1)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment