J'ai une routine tk perl appel d'une procédure à partir d'un module perl importé. L'interface graphique se bloque pendant l'exécution du sous-programme. Voici l'extrait de code que j'utilise. Quelqu'un peut-il suggérer une meilleure façon de faire cela pour que l'interface graphique soit active pendant que la procédure est en cours?tk perl - comment garder l'interface graphique en vie lorsque la procédure l'intérieur du module Perl est en cours d'exécution
use Tk;
use package1;
$mw = MainWindow->new;
$mw->geometry("+10+10");
$mw->title("My notebook GUI");
my $mwFrame = $mw->Frame(-borderwidth => 2, -relief => 'ridge')->pack(-fill=> 'none',-fil=> 'x');
my $nb = $mwFrame->NoteBook(-dynamicgeometry => 'true',-ipadx => 20, -ipady => 20)->pack(-expand => 1,-fill => 'both');
$page1 = $nb->add('Page1', -label => 'Page 1');
$page2 = $nb->add('Page2', -label => 'Page 2');
$page1->pack();
$page2->pack();
$button1 = $page1->Button(-text => "Not Selected", -background => 'gray', -state => 'disabled')->pack(-side => 'right', -expand => 0);
$button2 = $page2->Button(-text => "Not Selected", -background => 'gray', -state => 'disabled')->pack(-side => 'right', -expand => 0);
my $obj = package1->new();
my $obj->run();
Dans le code ci-dessus, j'appelle la procédure d'exécution de package1 à exécuter. Alors que la procédure prend un certain temps, l'interface graphique se fige, ne me permettant pas de faire quoi que ce soit dessus. Je ne peux même pas aller d'une page à l'autre dans l'interface graphique du cahier.
Quelqu'un peut-il s'il vous plaît me guider? Je suis un perl newbie.
Merci.
Pouvez-vous bourrer '$ mw-> mise à jour,' (ou les moins populaires 'mw- $> idletasks;') dans votre obj $? Ce post de Perlmonks l'explique mieux http://www.perlmonks.org/?node_id=574002 – charlesbridge
Je peux essayer $ mw-> update; à partir de mon code principal après avoir appelé la sous-routine. Mais il ne met à jour la fenêtre principale qu'après le retour de la procédure. L'alternative est de pouvoir exécuter "$ mw-> update" à partir de la procédure elle-même. Maintenant, comment vais-je être capable de faire ça? –