Hi!

use Tk; my $top = new MainWindow; my $c = $top->Canvas()->pack(); my ($x,$y); # left mouse-button -> create text $top->bind('<1>' => [\&click_left, Ev('x'),Ev('y')]); # shift and left mouse-button -> edit text $top->bind('<Shift-Button-1>' => [\&edit, Ev('x'),Ev('y')]); # right mouse-button -> move the text $top->bind('<3>' => [\&move_it, Ev('x'),Ev('y')]); MainLoop; sub click_left { my $e = shift; ($x,$y) = @_; my $t = $top->Toplevel(); my $entry = $t->Entry()->pack(); $entry->focus(); $t->bind('<Return>' =>sub{ my $text = $entry->get(); $c->createText($x,$y,-text=>$text); $t->destroy(); }); } sub move_it { my $e = shift; ($x,$y) = @_; my $id = $c->find('closest',$x,$y); $top->bind('<Button3-Motion>' => [\&move, Ev('x'),Ev('y'),$id]); } sub move { my ($e,$xm,$ym,$id) = @_; my $dx = $xm - $x; my $dy = $ym - $y; ($x,$y) = ($x+$dx, $y+$dy); $c->move($id,$dx,$dy); } sub edit { my $e = shift; ($x,$y) = @_; my $id = $c->find('closest',$x,$y); my $text = $c->itemcget($id,'text'); my $t = $top->Toplevel(-title=>"edit"); my $entry = $t->Entry()->pack(); $entry->insert(0,$text); $entry->focus(); $t->bind('<Return>' => sub { my $text = $entry->get(); $c->delete($id); $c->createText($x,$y,-text=>$text); $t->destroy(); }); }
I'm sure this is not the best way, but it should do what you want :-)

mawe


In reply to Re: Tk: how to have an editable/movable label? by mawe
in thread Tk: how to have an editable/movable label? by johnnywang

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.