tear-off buttons for Tkinter Text objects?

D

Deacon Sweeney

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
 
F

Fredrik Lundh

Deacon said:
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.

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>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top