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 :

Update d'un champs via un bouton


Sujet :

Interfaces Graphiques Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Par défaut Update d'un champs via un bouton
    Salut,

    Tout d'abord, bravo pour ce forum sur tk, je suis débutant et pas simple d'avoir des infos, des tutos et autres!

    Donc, je suis débutant et je tente de créer un petit outils pour le taf, et je plante actuellement sur un point (certainement bateau mais bon).

    Voici mon code actuel:
    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
     
    use Tk;
     
    $mw = MainWindow -> new();
    $mw -> title("BB!");
    $mw->geometry("300x100");
     
    $b_menu = $mw -> Frame(-relief => 'groove', -borderwidth => 2);
     
    $menu_app = $b_menu -> Menubutton (-text => "File",
                                    -tearoff => 0,
                                    -relief => 'ridge',
                                    -menuitems => [
                                                    ['command' => "Create new TLSE",-command => \&create_tlse],
                                                    ['command' => "Delete TLSE",-command => \&delete_tlse],
                                                    ['command' => "Exit",-command => sub {exit;}]
                                                  ]
                                    );
     
    $menu_app -> pack(-side => 'left');
    $b_menu -> pack(-side => 'top', -anchor => 'n', -fill => 'x');
     
    #Frame containing all TLSE
    $all_tlse = $mw -> Frame(-relief => 'raised', -borderwidth => 2) -> pack();
     
    $end = $mw -> Label(-relief => 'groove', -text => "2010", -font => '{Garamond} 10') -> pack (-side => 'bottom', -fill => 'both');
     
    MainLoop;
     
    #---------------------Subfonction------------------------------
     
    sub create_tlse {
     
            $tlse_creation = $mw -> Toplevel();
            $tlse_creation_title = $tlse_creation -> Label(-text => "Create a new TLSE") -> pack();
     
            $ent_name = $tlse_creation -> Entry() -> pack();
     
            $valid_button = $tlse_creation -> Button(-text => "Create", command => \&tlse) -> pack(-side => 'left');
            $but_close = $tlse_creation -> Button(-text=> "Close", -command => sub{ destroy $tlse_creation; }) -> pack();
    }
     
    sub tlse {
     
            #Frame TLSE
            $tlse_name = $all_tlse -> Frame(-relief => 'groove', -borderwidth => 2) -> pack(-side => 'left');
            $name = $ent_name -> get();
     
            #create the entry in the bb file
            $bb_base = "TLSE-data.bb";
            open(FILE,">>$bb_base") or die ("problem to open the bb file.");
            print FILE "\n";
    	print FILE $name;
    	#By default, at the TLSE creation, the workload is set to 0
    	print FILE ";0;";
            close FILE;
     
            $lb_name = $tlse_name -> Label(-text => "$name") -> pack(-side => 'top');
            #By default, at the TLSE creation, the workload is set to 0
            $lb_workload = $tlse_name -> Label(-text => "0") -> pack();
            $minus_button = $tlse_name -> Button(-text => "-", command => \&push_minus) -> pack(-side => 'left');
            $plus_button = $tlse_name -> Button(-text => "+", command => \&push_plus) -> pack(-side => 'right');
    }
     
    sub push_plus {
    }
     
    1;
    En fait, je souhaiterai via mes boutons + et - faire évoluer la valeur $lb_workload, bien sur en fonction du "TLSE" sur lequel je me trouve (et mettre à jour le fichier en // mais cela je devrais y arriver). J'ai tenté plusieurs choses mais sans succés.

    merci par avance

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Voici ton code un peu refait. Pose des questions si besoin

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #!/usr/bin/perl
    use warnings;
    use strict;
    use Tk;
     
    my $mw = MainWindow->new();
    $mw->title("BB!");
    $mw->geometry("300x100");
     
    my $b_menu = $mw->Frame( -relief => 'groove', -borderwidth => 2 );
     
    my $menu_app = $b_menu->Menubutton(
      -text      => "File",
      -tearoff   => 0,
      -relief    => 'ridge',
      -menuitems => [
        [ 'command' => "Create new TLSE", -command => \&create_tlse ],
        [ 'command' => "Delete TLSE",     -command => \&delete_tlse ],
        [ 'command' => "Exit",            -command => sub { exit; } ]
      ]
    );
     
    $menu_app->pack( -side => 'left' );
    $b_menu->pack( -side => 'top', -anchor => 'n', -fill => 'x' );
     
    #Frame containing all TLSE
    my $all_tlse = $mw->Frame( -relief => 'raised', -borderwidth => 2 )->pack();
     
    my $end = $mw->Label(
      -relief => 'groove',
      -text   => "2010",
      -font   => '{Garamond} 10'
    )->pack( -side => 'bottom', -fill => 'both' );
     
    MainLoop;
     
    #---------------------Subfonction------------------------------
     
    sub create_tlse {
     
      my $tlse_creation = $mw->Toplevel();
      my $tlse_creation_title = $tlse_creation->Label( -text => "Create a new TLSE" )->pack();
     
      my $ent_name = $tlse_creation->Entry()->pack();
     
      my $valid_button = $tlse_creation->Button(
        -text    => "Create",
        -command => [ \&tlse, $ent_name ]
      )->pack( -side => 'left' );
      my $but_close = $tlse_creation->Button(
        -text    => "Close",
        -command => sub { destroy $tlse_creation; }
      )->pack();
     
      return;
    }
     
    sub tlse {
      my ($ent_name) = @_;
     
      #Frame TLSE
      my $tlse_name = $all_tlse->Frame(
        -relief      => 'groove',
        -borderwidth => 2
      )->pack( -side => 'left' );
      my $name = $ent_name->get();
     
      #create the entry in the bb file
      my $bb_base = "TLSE-data.bb";
      open( FILE, '>>', $bb_base ) or die("problem to open the bb file.");
      print FILE "\n";
      print FILE $name;
     
      #By default, at the TLSE creation, the workload is set to 0
      print FILE ";0;";
      close FILE;
     
      my $lb_name = $tlse_name->Label( -text => "$name" )->pack( -side => 'top' );
     
      #By default, at the TLSE creation, the workload is set to 0
      my $valeur_workload = 0;
      my $lb_workload     = $tlse_name->Label( -textvariable => \$valeur_workload )->pack();
      my $minus_button    = $tlse_name->Button(
        -text    => "-",
        -command => [ \&push_minus, \$valeur_workload ]
      )->pack( -side => 'left' );
      my $plus_button = $tlse_name->Button(
        -text    => "+",
        -command => [ \&push_plus, \$valeur_workload ]
      )->pack( -side => 'right' );
     
      return;
    }
     
    sub push_minus {
      my ($ref_valeur_workload) = @_;
     
      # deférencement et incrementation
      ${$ref_valeur_workload}--;
     
      return;
    }
     
    sub push_plus {
      my ($ref_valeur_workload) = @_;
     
      # deférencement et incrementation
      ${$ref_valeur_workload}++;
     
      return;
    }

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Par défaut
    Merci Djibril,

    Effectivement, cela fonctionne impec et je comprends bien ce que tu as implémenté.

    Par contre, je me pose une question.

    Comment identifier mes fenêtres crées afin de pouvoir les supprimer? en effet, je créé les "TLSE" en donnant un nom genre toto, puis titi.

    Comment supprimer "titi" par exemple avec une une sous-fonction delete (à partir de mon menu "Delete a TLSE")?
    Je voudrais rentrer par exemple titi et la fenêtre titi est supprimé.

    En fait, je pensais que pour les push_minus et push_plus, tu allais identifié la fenêtre et ainsi de suite, mais effectivement ce que tu as fait est bcp plus simple.
    mais du coup je ne sais pas comment identifier telle ou telle fenêtre.

    Par avance merci

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Par défaut
    Autre question!

    J'ai tenté le code suivant pour bloquer la valeur mais cela ne fonctionne pas!
    Ou est-ce que je me trompe? Dans le test de la valeur j'imagine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sub push_minus {
      my ($ref_valeur_workload) = @_;
     
      if ($ref_valeur_workload > 0){
            ${$ref_valeur_workload}--;
      }
      elsif ($ref_valeur_workload = 0){
            my $message = $all_tlse->messageBox(-title=>'Message',
                    -message=>'The workload could not be negative!');
      }
     
      return;
    }
    par avance merci

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Par défaut
    oups, j'ai crié au loup trop vite
    j'ai trouvé mes erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sub push_minus {
      my ($ref_valeur_workload) = @_;
     
      if (${$ref_valeur_workload} > 0){
            ${$ref_valeur_workload}--;
      }
      elsif (${$ref_valeur_workload} == 0){
            my $message = $all_tlse->messageBox(-title=>'Message',
                    -message=>'The workload could not be negative!');
      }
     
      return;
    }

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Si ton problème est résolu, passe ton thread en résolu.

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/06/2010, 15h45
  2. Command sql update dans datalist via image bouton ( vs2008-vb.net)
    Par JFLESUEUR dans le forum Développement Web avec .NET
    Réponses: 4
    Dernier message: 22/03/2010, 08h44
  3. Ajouter des champs à un formulaire via un bouton
    Par Stass dans le forum Langage
    Réponses: 11
    Dernier message: 08/09/2006, 17h02
  4. Ajouter des champs à un formulaire via un bouton
    Par Stass dans le forum Langage
    Réponses: 11
    Dernier message: 08/09/2006, 17h02
  5. Ajouter des champs a un formulaire via un bouton
    Par Stass dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/09/2006, 13h59

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