IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Perl Discussion :

variable et bouton


Sujet :

Interfaces Graphiques Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Par défaut variable et bouton
    Bonjour,

    je pensais qu'il était possible de récupérer le retour d'une fonction de callback d'un bouton mais au lieu de ca je récupère une table de HASH (button.frame.frame) bref ce n'est pas ce que j’espérais...

    Dans mon exemple je crée une fenêtre de navigation pour récupérer un fichier.

    Prog principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $xorPath = &CREATE_WINDOW;
    Module IHM:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    sub CREATE_WINDOW {
     
       my $mw = MainWindow->new( -background => $window_color, -title => "Add Xor GDS" );
        # Give a modern look & feel to the Tk GUI : anti-alias font and a thin border
        $mw->optionAdd("*font", "-*-arial-normal-r-*-*-*-120-*-*-*-*-*-*");
        $mw->optionAdd("*borderWidth", 1);
     
     
        #$mw->geometry("700x720");
        $mw->geometry("500x150");
     
        my $mw_scrolled = $mw->Scrolled( "Pane", -scrollbars => 'e', -borderwidth => 2, -relief => 'groove', -sticky => 'nwse', -background => $window_color );
        $mw_scrolled->pack( -in => $mw, -fill => 'both', -expand => 1 );
        $mw_scrolled->{SubWidget}->{yscrollbar}->configure( -width => 10, -background => $button_color );
     
        my $Menu_techno_scrolled = &CREATE_WINDOW_COMMON($mw_scrolled,
                                                         $directory,
                                                         $directory
        );
     
        $mw_scrolled->Button( -text => "Save", -command => [\&save_xorgds, $mw], -background => $button_color, -font => $font )
          ->grid( -columnspan => 2, -sticky => "nsew", -padx => 5, -pady => 5 );
     
        $mw_scrolled->Button( -text => "Exit", -command => [\&close_xor_ihm, $mw], -background => $button_color, -font => $font )
          ->grid( -columnspan => 2, -sticky => "nsew", -padx => 5, -pady => 5 );
     
    # Run GUI !!
    MainLoop;
    return $gds1;
    }
     
    sub save_xorgds {
     
    	my $mw = shift;
    	# Destruction de l'interface graphique, mais pas arrêt du programme Perl 
    	$mw->destroy;
     
    }
     
    sub close_xor_ihm {
     
    	$gds1 = "none";
    	my $mw = shift;
    	# Destruction de l'interface graphique, mais pas arrêt du programme Perl 
    	$mw->destroy;
    }
    $gds1 est une variable exportée depuis un autre module soit elle vaut le path choisi dans mon navigateur soit elle vaut none cela fonctionne mais je trouve cette méthode assez peu élégante...

    Au départ j'avais en tete de récupérer le retour d'une fonction de callback bouton et en fonction traiter l’événement, mais je n'ai pas réussi a manipuler le retour correctement...

    Je voulais faire quelques choses comme ca:

    Prog principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $xorPath = &CREATE_WINDOW;
    Module IHM:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    my tmp = "";
    sub CREATE_WINDOW {
     
       my $mw = MainWindow->new( -background => $window_color, -title => "Add Xor GDS" );
        # Give a modern look & feel to the Tk GUI : anti-alias font and a thin border
        $mw->optionAdd("*font", "-*-arial-normal-r-*-*-*-120-*-*-*-*-*-*");
        $mw->optionAdd("*borderWidth", 1);
     
     
        #$mw->geometry("700x720");
        $mw->geometry("500x150");
     
        my $mw_scrolled = $mw->Scrolled( "Pane", -scrollbars => 'e', -borderwidth => 2, -relief => 'groove', -sticky => 'nwse', -background => $window_color );
        $mw_scrolled->pack( -in => $mw, -fill => 'both', -expand => 1 );
        $mw_scrolled->{SubWidget}->{yscrollbar}->configure( -width => 10, -background => $button_color );
     
        my $Menu_techno_scrolled = &CREATE_WINDOW_COMMON($mw_scrolled,
                                                         $directory,
                                                         $directory
        );
     
        my $ex = $mw_scrolled->Button( -text => "Save", -command => [\&save_xorgds, $mw, $tmp], -background => $button_color, -font => $font )
          ->grid( -columnspan => 2, -sticky => "nsew", -padx => 5, -pady => 5 );
     
        $mw_scrolled->Button( -text => "Exit", -command => [\&close_xor_ihm, $mw], -background => $button_color, -font => $font )
          ->grid( -columnspan => 2, -sticky => "nsew", -padx => 5, -pady => 5 );
     
    # Run GUI !!
    MainLoop;
    return $ex;
    }
     
    sub save_xorgds {
     
    	my $mw = shift;
            my $tmp = shift;
            $tmp = $gds1;
    	# Destruction de l'interface graphique, mais pas arrêt du programme Perl 
    	$mw->destroy;
            return $tmp
     
    }
     
    sub close_xor_ihm {
     
    	my $mw = shift;
    	# Destruction de l'interface graphique, mais pas arrêt du programme Perl 
    	$mw->destroy;
    }
    Avec $tmp modifier dans save_xorgds recuperer la variable modifiée dans $ex puis retourner $ex mais ca ne marche pas...

  2. #2
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Bonjour,
    Je n'ai pas tout compris, sauf :
    Dans mon exemple je crée une fenêtre de navigation pour récupérer un fichier.
    Je suis parti de ce que t'avait fait djibril.

    Rudimentaire, en espérant que cela puisse t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use Tk;
     
    my $Filepath = 'E:/_DEV';
     
    # Creation de la fenetre ( parent widget )
    my $mw = MainWindow->new( -title => "Check Teg width" );
    my $mon_cadre = $mw->Frame(
    	-borderwidth => 5,
    	-relief      => 'groove'
    );
     
    $mon_cadre->Label( -text => "Souhaitez-vous stopper le programme ?" )->pack;
     
    my $bouton_yes = $mon_cadre->Button(
    	-text    => "YES",
    	-command => \&arret_programme,
    );
     
    my $bouton_non = $mon_cadre->Button( 
    	-text => "NO", 
    	-command => \&fermer_interface_graphique, 
    );
     
    # Choix Fichier
    my $bouton_file = $mon_cadre->Button(
    	-text    => "Fichier",
    	-command => sub {
    		get_file();
    	},
    );
     
    $mon_cadre->pack( -side => 'top', -fill => 'x' );
    $bouton_file->pack( -side => 'left',  -padx => 50, -pady => 5 );
    $bouton_yes->pack( -side => 'left',  -padx => 50, -pady => 5 );
    $bouton_non->pack( -side => 'right', -padx => 50, -pady => 5 );
     
    MainLoop;
     
    print "suite de mon programme avec Fichier = $Filepath\n";
     
    ########################
    # Recherche d'un fichier
    #
    sub get_file {
      my @types =
           (["All files",        '*'],
            ["Log files", [qw/.txt .log/]],
           );
      $Filepath = $mw->getOpenFile(-filetypes => \@types) or return();
      return($Filepath);
    }
     
    sub fermer_interface_graphique {
     
    	# Destruction de l'interface graphique, mais pas arrêt du programme Perl 
    	$mw->destroy;
    }
     
    sub arret_programme {
     
    	# Destruction de l'interface graphique, mais pas arrêt du programme Perl 
    	$mw->destroy;
     
    	# Arrêt du programme complet
    	exit;
    }
    [Edit : 05:22]
    Dans sub get_file j'ai oublié le initialdir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ########################
    # Recherche d'un fichier
    #
    sub get_file {
      my @types =
           (["All files",        '*'],
            ["Log files", [qw/.txt .log/]],
           );
      $Filepath = $mw->getOpenFile(-initialdir => $Filepath, -filetypes => \@types) or return();
      return($Filepath);
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Par défaut
    Bonjour merci pour le retour,

    la boite oui/non est dissocier de la boite de navigation

    Boite oui/non:

    Nom : box_yesno.png
Affichages : 212
Taille : 37,3 Ko

    Boite de navigation:

    Nom : box_xorgds.png
Affichages : 181
Taille : 18,8 Ko

    Nom : browser.png
Affichages : 228
Taille : 64,5 Ko

    Voila ce que j'obtiens avec le code posté ci-dessus.

    Désolé si je ne suis pas clair dans mes explications, en faite ma question porte sur la méthode a utiliser pour récupérer le retour d'une fonction callback associé a un bouton de la bibliothèque Tk.

    La commande du bouton étant associée a une fonction si par exemple on modifie le contenue d'une variable dans cette fonction comment fait-on pour récupérer cette variable modifiée sans la déclarer en global, j'espère être plus clair.

    Merci pour votre aide.

  4. #4
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    c'est bien plus moi qui devient dur de la comprenette avec l'âge que toi qui n'est pas clair

    Je n'ai pas le temps de modifier ton code, et n'étant plus capable d'écrire de tête du code sans erreur, voici un copier/coller d'un bouton perso qui semble faire ce dont tu as besoin :
    une variable modifiée par une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $optionmenu_RDeb = $cadre_avancement->Scale(
    	-background => $couleur_commune,
    	-orient => 'h',	 	-digit=>1,
    	-length => 100,
    	-from => 1,		-to => 100,
    	-variable => \$config{DEFAUT}{RDeb},
    	-command => \&affichage_titre,
    	-sliderlength => 10,
    );
    Peu importe que ca soit un Scale ou un Bouton.
    Les deux informations dont tu as besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -variable => \$config{DEFAUT}{RDeb},
    à -variable est associé une variable que l'on passe par adresse. Là, la variable se trouve être issue d'un fichier de config mais ça pourrait être $toto, ce qui donnerait :
    ET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -command => \&affichage_titre,
    à -command on passe la fonction, là aussi par adresse, ce qui dans mon exemple pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Choix Fichier
    my $bouton_file = $mon_cadre->Button(
    	-text    => "Fichier",
            -variable => \$Filepath,
    	-command => \&get_file,
    	},
    );
    Code non testé & neurone HS
    Je ne peux pas revenir avant 14h00.
    @+

  5. #5
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    J'ai un peu plus de temps cet aprem.

    Désolé, le widget button ne connait pas l'option -variable mais seulement -textvariable qui modifie le texte écrit sur le bouton.
    Ce n'est pas la première fois que je me fais avoir

    Le bouquin de Nancy Walsh à télécharger en pdf.
    Et le Mastering en ligne.

    Là pour l'instant je ne vois pas comment faire sans passer par une variable globale

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Par défaut
    Merci pour les infos

    Je n'ai pas eu le temps de tester tes exemples.

    Tu es sur que -variable n'est pas reconnu car dans la doc mastering il y a un tableau récapitulatif des options bouton.

    Sample:

    Nom : option1.png
Affichages : 172
Taille : 99,1 Ko

    Nom : option2.png
Affichages : 225
Taille : 345,7 Ko

    Lol je viens de voir que l'option variable n'est pas coché

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. variables dans boutons paypal
    Par delavega dans le forum E-Commerce
    Réponses: 3
    Dernier message: 05/06/2012, 12h24
  2. [AC-2003] Lien internet variable sur bouton
    Par BMATH dans le forum IHM
    Réponses: 1
    Dernier message: 11/11/2011, 00h08
  3. Réaffichage de variables sur bouton radio et listes
    Par pasc06 dans le forum Langage
    Réponses: 1
    Dernier message: 14/10/2008, 09h57
  4. [PHP-JS] comment lier deux variable à un bouton radio
    Par faucon54 dans le forum Langage
    Réponses: 15
    Dernier message: 29/05/2007, 17h03
  5. Réponses: 3
    Dernier message: 09/03/2006, 20h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo