[perl TK] comment on fait un drag n drop

comment on fait un drag n drop [perl TK] - Perl - Programmation

Marsh Posté le 06-01-2003 à 10:34:31    

salut a tous et bonne annee
 
malgre un exemple trouve sur le net  
 

Citation :


sub StartDrag  
{
  my($token) = @_;
  my $w = $token->parent; # $w is the source listbox
  my $e = $w->XEvent;
  my $idx = $w->nearest($e->y); # get the listbox entry under cursor
  if (defined $idx)  
  {
    # Configure the dnd token to show the listbox entry
    $token->configure(-text => $w->get($idx));
    # Show the token
    my($X, $Y) = ($e->X, $e->Y);
    $token->MoveToplevelWindow($X, $Y);
    $token->raise;
    $token->deiconify;
    $token->FindSite($X, $Y, $e);
  }
}
 
# Accept a drop and insert a new item in the destination listbox.
sub Drop  
{
    my($lb, $dnd_source) = @_;
    $lb->insert("end", $dnd_source->cget(-text));
    $lb->see("end" );
}
 
# Define the source for drags.
# Drags are started while pressing the left mouse button and moving the
# mouse. Then the StartDrag callback is executed.
$dnd_token = $Text_input_added->DragDrop
  (-event     => '<B1-Motion>',
   -sitetypes => ['Local'],
   -startcommand => sub { StartDrag($dnd_token) },
  );
# Define the target for drops.
$Text_replace_add->DropSite
  (-droptypes     => ['Local'],
   -dropcommand   => [ \&Drop, $Text_replace_add, $dnd_token ],
  );

 
 
je n'arrive pas a faire un drag n drop entre duex fenetre en perl TK
 
j'avance doucement mais j'ai maintenant un probleme avec l'option "nearest" le debug me dit "Can't locate auto/Tk/Text/nearest.al in @INC"
ca vient d'où ca ?
 
merci de votre aide

Reply

Marsh Posté le 06-01-2003 à 10:34:31   

Reply

Marsh Posté le 06-01-2003 à 12:35:08    

circeedevalette a écrit :

le debug me dit "Can't locate auto/Tk/Text/nearest.al in @INC"
ca vient d'où ca ?
 
merci de votre aide

d'où ça vient ? Ben du débugger de Perl justement :D, il te dit juste que, dans ton programme il est fait référence à un fichier se trouvant en principe dans auto/Tk/Text et que le dit fichier n'a pas été trouvé dans le répertoire en question
 
Le package Text pour Tk figure-t-il dans ta distribution Perl ? Peut être est-ce un module qui te manque ? Sinon, fais une recherche dans ton dossier Perl pour savoir s'il y a bien un fichier nearest.al planqué quelque part ?


Message édité par Aricoh le 06-01-2003 à 12:37:34

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 06-01-2003 à 12:43:51    

Petits compléments d'infos :
 
- j'utilise Tk aussi avec Perl (Win32) mais j'ai pas trouvé de fichier nearest.al dans ma distrib
 
- en zieutant sur les modules PPM de Perl (http://www.activestate.com/PPMPack [...] ilds-only/), j'ai trouvé les modules suivants :
  - Tk-TextANSIColor.zip
  - Tk-Text-SuperText.zip
 
J'ignore si le fichier se trouverait dans l'un de ces packages, mais vu que le débugger cite un dossier Tk/Text ...


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 06-01-2003 à 12:55:45    

Aricoh a écrit :

Petits compléments d'infos :
 
- j'utilise Tk aussi avec Perl (Win32) mais j'ai pas trouvé de fichier nearest.al dans ma distrib
 
- en zieutant sur les modules PPM de Perl (http://www.activestate.com/PPMPack [...] ilds-only/), j'ai trouvé les modules suivants :
  - Tk-TextANSIColor.zip
  - Tk-Text-SuperText.zip
 
J'ignore si le fichier se trouverait dans l'un de ces packages, mais vu que le débugger cite un dossier Tk/Text ...


 
en fait, ma question est mal posée.
 
j'avais mal adaptee mon exemple qui marche sur des "scrolled" avec mes "Text" d'où le probleme de nearest.al
 
mais j'essai toujours de mettre en place ce fichu drag n drop
 

Reply

Marsh Posté le 06-01-2003 à 12:57:24    

arf ! ben sinon, je peux pas te dire, je savais même pas qu'on pouvait faire du drag'n drop avec Tk  :heink:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 06-01-2003 à 13:07:54    

Aricoh a écrit :

arf ! ben sinon, je peux pas te dire, je savais même pas qu'on pouvait faire du drag'n drop avec Tk  :heink:  


 
essaye ca alors
 
 

Citation :


#!perl -w
 
use Tk;
use Tk::DragDrop;
use Tk::DropSite;
use strict;
use vars qw($top $f $lb_src $lb_dest $dnd_token);
 
$top = new MainWindow;
 
$top->Label(-text => "Drag items from the left listbox to the right one"
     )->pack;
$f = $top->Frame->pack;
$lb_src  = $f->Scrolled('Listbox', -scrollbars => "oe", -background => 'white',-width =>47,-height => 10)
  ->pack(-side => "left" );
$lb_dest = $f->Scrolled('Listbox', -scrollbars => "oe", -background => 'white',-width =>47,-height => 10)
  ->pack(-side => "left" );
 
$lb_src->insert("end", sort keys %ENV);
 
# Define the source for drags.
# Drags are started while pressing the left mouse button and moving the
# mouse. Then the StartDrag callback is executed.
$dnd_token = $lb_src->DragDrop
  (-event     => '<B1-Motion>',
   -sitetypes => ['Local'],
   -startcommand => sub { StartDrag($dnd_token) },
  );
# Define the target for drops.
$lb_dest->DropSite
  (-droptypes     => ['Local'],
   -dropcommand   => [ \&Drop, $lb_dest, $dnd_token ],
  );
 
MainLoop;
 
sub StartDrag  
{
  my($token) = @_;
  my $w = $token->parent; # $w is the source listbox
  my $e = $w->XEvent;
  my $idx = $w->nearest($e->y); # get the listbox entry under cursor
  if (defined $idx)  
  {
    # Configure the dnd token to show the listbox entry
    $token->configure(-text => $w->get($idx));
    # Show the token
    my($X, $Y) = ($e->X, $e->Y);
    $token->MoveToplevelWindow($X, $Y);
    $token->raise;
    $token->deiconify;
    $token->FindSite($X, $Y, $e);
  }
}
 
# Accept a drop and insert a new item in the destination listbox.
sub Drop {
    my($lb, $dnd_source) = @_;
    $lb->insert("end", $dnd_source->cget(-text));
    $lb->see("end" );
}
 
__END__

 
 
mais il faut que je l'adapte parce que le "scrolled" y a moins de possibilitée je pense que les "Text"
 
PS : smilley de merde
a la place y :D


Message édité par circeedevalette le 06-01-2003 à 13:09:10
Reply

Marsh Posté le 07-01-2003 à 10:18:26    

Arf ! La dernière fois que j'ai bossé sur une appli en Perl/Tk, je me suis rendu compte que, sur les 14/15 heures de boulot passées dessus, j'ai dû en bouffer au moins 7 ou 8, rien que pour l'interface graphique.
 
Depuis, je rebosse sur des progs en mode console, ça va nettement plus vite  :D


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 10-01-2003 à 16:23:44    

Aricoh a écrit :

Arf ! La dernière fois que j'ai bossé sur une appli en Perl/Tk, je me suis rendu compte que, sur les 14/15 heures de boulot passées dessus, j'ai dû en bouffer au moins 7 ou 8, rien que pour l'interface graphique.
 
Depuis, je rebosse sur des progs en mode console, ça va nettement plus vite  :D  


 
oui mais comme je fais des prog qui ne sont pas pour moi mais pour des clients  
et qu'il y a pas mal de chose a parametrer, c'est pas mal une petite interface grafique, plus ergonomique que la ligne de commande du moins

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed