Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Turtle window pops under the terminal on OSX #55780

Closed
abalkin opened this issue Mar 16, 2011 · 15 comments
Closed

Turtle window pops under the terminal on OSX #55780

abalkin opened this issue Mar 16, 2011 · 15 comments
Labels
OS-mac stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error

Comments

@abalkin
Copy link
Member

abalkin commented Mar 16, 2011

BPO 11571
Nosy @rhettinger, @ronaldoussoren, @abalkin, @ned-deily, @msabramo
Dependencies
  • bpo-9384: Tkinter windows pop under the terminal in OSX
  • Files
  • issue-11571.txt
  • issue11571.patch
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2013-07-31.22:51:26.023>
    created_at = <Date 2011-03-16.14:57:30.080>
    labels = ['OS-mac', 'type-bug', 'library']
    title = 'Turtle window pops under the terminal on OSX'
    updated_at = <Date 2014-08-24.01:02:58.566>
    user = 'https://github.com/abalkin'

    bugs.python.org fields:

    activity = <Date 2014-08-24.01:02:58.566>
    actor = 'ned.deily'
    assignee = 'none'
    closed = True
    closed_date = <Date 2013-07-31.22:51:26.023>
    closer = 'belopolsky'
    components = ['Library (Lib)', 'macOS']
    creation = <Date 2011-03-16.14:57:30.080>
    creator = 'belopolsky'
    dependencies = ['9384']
    files = ['21242', '21529']
    hgrepos = []
    issue_num = 11571
    keywords = ['patch']
    message_count = 15.0
    messages = ['131124', '131128', '131133', '132918', '133215', '133234', '133235', '133302', '161145', '161146', '192523', '204261', '216890', '216891', '225778']
    nosy_count = 7.0
    nosy_names = ['rhettinger', 'ronaldoussoren', 'belopolsky', 'ned.deily', 'python-dev', 'Marc.Abramowitz', 'James.Cook']
    pr_nums = []
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue11571'
    versions = ['Python 3.4', 'Python 3.5']

    @abalkin
    Copy link
    Member Author

    abalkin commented Mar 16, 2011

    If you have a large enough terminal window and run

    $ python -m turtle

    on OSX, you will see nothing because turtle screen pops under the terminal.

    Ned Deily suggested in msg130421 that this can be fixed by setting "-topmost" WM attribute on the root window. However, if you apply the following patch:

    diff -r 71b182134853 Lib/turtle.py
    --- a/Lib/turtle.py	Wed Mar 16 09:44:26 2011 -0400
    +++ b/Lib/turtle.py	Wed Mar 16 10:49:22 2011 -0400
    @@ -993,6 +993,7 @@
             self._colormode = _CFG["colormode"]
             self._keys = []
             self.clear()
    +        cv._rootwindow.call('wm', 'attributes', '.', '-topmost', '1')
     
         def clear(self):
             """Delete all drawings and all turtles from the TurtleScreen.

    The result is that turtle window stays on top even if you shift focus back to the terminal.

    The correct behavior would be for the turtle screen to pop on top, ideally without receiving the focus, but allow users to obscure it with another window if they wish.

    @abalkin abalkin added stdlib Python modules in the Lib dir OS-mac type-bug An unexpected behavior, bug, or error labels Mar 16, 2011
    @ronaldoussoren
    Copy link
    Contributor

    The attached patch forces the window to the front by first making the window a topmost window and then resetting that flag.

    Could you test if this does want you'd like it to?

    (The patch is for 3.3, will backport upto 2.7 when the behavior is correct)

    @abalkin
    Copy link
    Member Author

    abalkin commented Mar 16, 2011

    On Wed, Mar 16, 2011 at 11:26 AM, Ronald Oussoren
    <report@bugs.python.org> wrote:
    ..

    The attached patch forces the window to the front by first making the window
    a topmost window and then resetting that flag.

    Could you test if this does want you'd like it to?

    Yes, this works. Nice trick - did not think of it.

    I don't use idle, but someone should test that this works when turtle
    is used by idle. It works fine when I start idle from command line
    (in which case idle itself pops under the terminal), but I understand
    that most users start idle from Finder or the Dock and I don't have
    that set up.

    A nit-pick: in the current turtle code module imports and from module
    imports are visually separated. Consider moving "import sys" below
    "import inspect".

    @ned-deily
    Copy link
    Member

    Looks good to me. I tested on OS X with both Tk 8.5 on 10.6 and Tk 8.4 on 10.5. The demo runs fine under IDLE.app and bin/idle3. If no objections, I'll commit the patch with the nit addressed.

    @ronaldoussoren
    Copy link
    Contributor

    +1 on applying the patch.

    I can do so on Sunday but feel to apply the patch before that.

    @abalkin
    Copy link
    Member Author

    abalkin commented Apr 7, 2011

    While you are at it, can you also fix the same issue with "python -m tkinter"?

    @abalkin
    Copy link
    Member Author

    abalkin commented Apr 7, 2011

    .. and "python -m turtledemo"?

    @ronaldoussoren
    Copy link
    Contributor

    On 07 Apr, 2011,at 07:03 PM, Alexander Belopolsky <report@bugs.python.org> wrote:

    Alexander Belopolsky <belopolsky@users.sourceforge.net> added the comment:

    While you are at it, can you also fix the same issue with "python -m tkinter"?
     
    Sure, I can add a hack to that module as well.

    Ronald

    @msabramo
    Copy link
    Mannequin

    msabramo mannequin commented May 19, 2012

    I wonder if this could be applied at some lower level in TkInter, because this bug happens with every Tk app -- e.g.: turtle, idle, web2py

    @ned-deily
    Copy link
    Member

    Marc, it could although that would be a change in behavior that possibly might not be desired by all tkinter apps. Perhaps the thing to do is add an optional "topmost" argument to tkinter.Tk() with the default value being True.

    @ronaldoussoren
    Copy link
    Contributor

    I'm revisiting some old issues, and while I don't mind adding workarounds to the various scripts I do not consider this to be a bug. This is unexpected behavior from the platform, and only affects running scripts from the command-line (bundling the script in an app bundle would result in a window that pops up in front when the app is launched).

    I'm unassigning the issue because I'm no longer interested in working on this.

    @ronaldoussoren ronaldoussoren removed their assignment Jul 7, 2013
    @abalkin abalkin closed this as completed Jul 31, 2013
    @JamesCook
    Copy link
    Mannequin

    JamesCook mannequin commented Nov 24, 2013

    This problem still exists with the version of turtle bundled with python 3.3.3 and ActiveState ActiveTcl8.5.15.1. While it may be an issue with the underlying platform, it's unfortunate for young beginners just learning python who don't understand the underlying issue.

    If other parents are searching for a solution, this works:

    turtle.getscreen()._root.attributes('-topmost', 1)
    turtle.getscreen()._root.attributes('-topmost', 0)

    Any chance the workaround patch could be applied so I don't have to tell my kid to add this magic to his scripts?

    @python-dev
    Copy link
    Mannequin

    python-dev mannequin commented Apr 20, 2014

    New changeset 1f3946b22e64 by Ned Deily in branch '3.4':
    Issue bpo-11571: Ensure that the turtle window becomes the topmost window
    http://hg.python.org/cpython/rev/1f3946b22e64

    New changeset 01228d7b5e01 by Ned Deily in branch 'default':
    Issue bpo-11571: merge with 3.4
    http://hg.python.org/cpython/rev/01228d7b5e01

    @ned-deily
    Copy link
    Member

    The fix for turtle has been applied for release in 3.4.1 and 3.5.0.

    @ned-deily
    Copy link
    Member

    As identified in bpo-22168, the changes introduced here do not work when the user supplies a Canvas rather than relying on the turtle default. There is a patch there that should solve that issue. But I now think that the original approach was not an ideal solution. For one, it introduced Tk-specific code into TurtleScreen, which is supposed to be independent of the underlying graphics toolkit. Two, as we now know from subsequent work, though the setting of the -topmost attribute does move the window to the front, it does not change which gui application has the keyboard and menu focus. So the user still needs to click on the now-raised window to interact with it. The code added to Lib/turtledemo/main.py in bpo-17172 solves that problem through the use of a little Applescript. There are a number of turtle and turtledemo changes pending at the moment. It might be worthwhile to re-examine this (perhaps, as earlier suggested, try to deal with it at the tkinter level through an option) after the dust settles.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    OS-mac stdlib Python modules in the Lib dir type-bug An unexpected behavior, bug, or error
    Projects
    None yet
    Development

    No branches or pull requests

    3 participants