#!/usr/bin/perl # http://perlmonks.org/?node_id=1196818 use strict; use warnings; use Tk; sub xy { $_[0]->XEvent->x, $_[0]->XEvent->y } my $mw = MainWindow->new; $mw->overrideredirect(1); $mw->Label( -text => 'Press 1, Move, then Release in green Canvas to move window', )->pack(-fill => 'x'); my $c = $mw->Canvas(-width => 500, -height => 400, -bg => 'green', )->pack; $c->Tk::bind('<1>' => \&leftdown); $c->Tk::bind('' => \&leftmotion); $mw->Button(-text => 'Exit', -command => sub { $mw->destroy }, )->pack(-fill => 'x'); MainLoop; my ($startx, $starty); sub leftmotion { my ($endx, $endy) = &xy; my $deltax = $endx - $startx; my $deltay = $endy - $starty; my ($size, $x, $y) = split /\+/, $mw->geometry; $mw->geometry( "$size+" . ($x + $deltax) . "+" . ($y + $deltay) ); } sub leftdown { ($startx, $starty) = &xy; }