tear-off buttons for Tkinter Text objects?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Deacon Sweeney

    tear-off buttons for Tkinter Text objects?

    Hi. I've embedded some buttons in a Text object, and I would like these
    buttons to perform a 'tear-off' of that line when clicked. That is, when the
    button is clicked, I would like a new Toplevel to appear with a new Text
    object which contains the text. Creating a 'pop-off' button, where the
    Toplevel appears at some predetermined (or calculatable) point would be
    easy, I'd just create the Toplevel, position it, and pass the info to it.
    The difference would be that the 'tear-off' button would automatically
    'grab' the new Toplevel so that it could be easily repositioned in the same
    motion of the mouse.

    There are three benefits to this that make it worthwhile. One, obviously
    repositioning is one mouse click easier. Two, I'll also add code to dock the
    lines, so re-docking a mistaken tear-off would be easier as well. Three, its
    just cool.

    So is there maybe some way to trick the window manager into thinking there's
    been a mouse click? It would be easy enough to position the title bar of the
    new Toplevel under the cursor. Or can the new window just be (magically)
    bound to the cursor until the button-pressing click is released? Any help
    would be appreciated.

    Thanks,

    Deacon Sweeney


  • Fredrik Lundh

    #2
    Re: tear-off buttons for Tkinter Text objects?

    Deacon Sweeney wrote:
    [color=blue]
    > Hi. I've embedded some buttons in a Text object, and I would like these
    > buttons to perform a 'tear-off' of that line when clicked. That is, when[/color]
    the[color=blue]
    > button is clicked, I would like a new Toplevel to appear with a new Text
    > object which contains the text. Creating a 'pop-off' button, where the
    > Toplevel appears at some predetermined (or calculatable) point would be
    > easy, I'd just create the Toplevel, position it, and pass the info to it.
    > The difference would be that the 'tear-off' button would automatically
    > 'grab' the new Toplevel so that it could be easily repositioned in the[/color]
    same[color=blue]
    > motion of the mouse.[/color]

    this approach should work:

    - add custom event handlers for button press, mouse motion, and button
    release.

    - in the button press handler, register the current mouse coordinates
    (relative to
    the root window), create the toplevel, and position it in a suitable
    location. also
    grab the mouse pointer (to make sure you get all mouse events)
    (autograbbing
    may take care of that, but a little explicitness never hurts)

    - in the mouse motion handler, calculate the difference between the current
    mouse position and the last registered position, and move the toplevel
    accordingly

    - in the mouse release handler, release the grab (if necessary)

    </F>




    Comment

    Working...