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 :

Organisation de ma fenêtre


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut Organisation de ma fenêtre
    Bonjour,
    J'essaie de m'attaquer à un problème depuis plusieurs jours mais je ne pense pas avoir la bonne méthode et je n'ai pas vraiment d'expérience en interface graphique.

    Mon problème : Je récupère des textos d'une base de données, et je voudrais les afficher selon le schéma classique que l'on retrouve dans nos smartphones :


    Toutes les données sont stockées dans l'ordre chronologique dans un array (merci encore à Gardyen d'ailleurs pour son aide !).
    Dans un premier temps j'ai séparé les messages de l'envoyeur et du receveur dans 2 array : @textSender et @textReceiver.
    Pour le moment je n'ai pas essayé de séparer les messages dans des cadres distincts, je les ai juste affichés soit à gauche, soit à droite. Je n'arrive pas à faire une scrollbar commune aux widgets $right_frame et $left_frame. Et je n'arrive pas non plus à justifier ces widgets l'un sur la gauche, l'autre sur la droite.

    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
    my $main_frame = $mw->Frame()->pack(-side => 'top', -fill => 'x');
    my $adj = $mw -> Adjuster();
     
    my $top_frame = $main_frame->Frame(-background => "red")->pack(-side => 'top',
                                                                    -fill => 'x');
    my $left_frame = $main_frame->Frame(-background => "SkyBlue1")->pack(-side => 'left',
    																	-fill => 'y');
    my $right_frame = $main_frame->Frame(-background => "SeaGreen3")->pack(-side => "right");
     
    $top_frame->Label(	-text => "Messages", 
                        -background => "red")->pack(-side => "top");
    $left_frame->Label(	-text => join("\n",@textSender),
    					-background => "SkyBlue1",
                        -foreground => "black")->pack(-side => 'top');
    $right_frame->Label(-text => join("\n",@textReceiver),
    					-background => "SeaGreen3",
                        -foreground => "black")->pack(-side => 'top');
    my $bouton = $mw->Button (
    				-text =>"Fermer",
    				-command => sub {exit;})->pack;
    $adj -> packAfter($left_frame, -side => 'left');
    MainLoop;
    Pour le moment cela en me permet

    Au vu de mes galères, je pense que pack ne serait pas la bonne méthode à utiliser, le mieux serait un grid peut-être, mais j'ai plus de 800 messages à afficher.

    Pourriez-vous me conseiller une méthode ou un exemple qui se rapprocherait de ce que je voudrais réaliser ?
    Merci d'avance !

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    As-tu un exemple de programme que l'on peut tester. Ce sera plus simple pour que l'on puisse t'aider.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Merci djibril.
    J'ai rempli le tableau en dur car je ne peux pas vous transmettre la bdd.

    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
    #!/usr/bin/perl
     
    # be strict
    use strict;
    use warnings;
     
    use Tk;
    use Tk::Adjuster;
     
    ##########################################################
    #														 #
    #						G U I							 #
    #														 #
    ##########################################################
     
    my $mw = new MainWindow;#ou MainWindow->new();
    $mw->title ("My frame");
    $mw->geometry("1200x600");
    my $cell;
    my @textSender;
    my @textReceiver;
    my @all_lines = (
    '2', '1266619337', 'test', 
    '3', '1266624381', 'tsdfhsldjfhnsldkflksdjflks,dfssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssk:ds,fsdfsdfsdfsdfsdfsdfest',
    '2', '1266625519', 'test',
    '3','1266662837', "test",
    '3','1266664673', "test",
    '3','1266777388', "test",
    '3',1266778423, "test",
    '2',1266787476, "tesdfffffffffffffffffffffffqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqfffffffffffffffffffffffffffft",
    '2',1266787924, "test",
    '3',1266788626, "test",
    '2',1266790411, "test",
    '3',1266796849, "test",
    '2',1266797836, "test",
    '3',1266957673, "test",
    '2',1266959468, "test",
    '3',1266962012, "test",
    '2',1266966835, "test",
    '3',1266968068, "test",
    '3',1266969797, "test",
    '3',1267005658, "test",
    '2',1267006399, "test",
    '2',1267035316, "test");
     
    for my $i (0 .. 100) {  #$#all_lines
    	$cell = $all_lines[$i];
     
    	if($i %3 == 0){#C'est un Flag
    		print $cell;
    		if($cell == "2"){ #Sender
    			push @textSender, scalar(localtime($all_lines[$i+1]));
    			push @textSender, $all_lines[$i+2];
    		}
    		if($cell == "3"){#Receiver
    			push @textReceiver, scalar(localtime($all_lines[$i+1]));
    			push @textReceiver, $all_lines[$i+2];
    		}
    	}
    }
     
    my $main_frame = $mw->Frame()->pack(-side => 'top', -fill => 'x');
    my $adj = $mw -> Adjuster();
     
    my $top_frame = $main_frame->Frame(-background => "red")->pack(-side => 'top',
                                                                    -fill => 'x');
    my $left_frame = $main_frame->Frame(-background => "SkyBlue1")->pack(-side => 'left',
    																	-fill => 'y');
    my $right_frame = $main_frame->Frame(-background => "SeaGreen3")->pack(-side => "right");
     
    $top_frame->Label(	-text => "Messages", 
                        -background => "red")->pack(-side => "top");
    $left_frame->Label(	-text => join("\n",@textSender),
    					-background => "SkyBlue1",
                        -foreground => "black")->pack(-side => 'top');
    $right_frame->Label(-text => join("\n",@textReceiver),
    					-background => "SeaGreen3",
                        -foreground => "black")->pack(-side => 'top');
     
    #my $scroll = $main_frame->Scrollbar(-command => ['yview', $main_frame]);
    #my $txt = $top_frame->Scrolled("Label",-scrollbars=>'w');
     
    my $bouton = $mw->Button (
    				-text =>"Fermer",
    				-command => sub {exit;})->pack;
     
    #$scroll->pack(-side => 'left', -fill => 'y');
    $adj -> packAfter($left_frame, -side => 'left');
     
    MainLoop;

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Ok, j'ai bien le programme qui s'ouvre bien.
    Qu'est-ce que tu souhaites ?

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    J'aimerais faire une scrollbar qui englobe la partie droite et la partie gauche à la fois.
    Et j'aimerais que les messages s'alternent selon la date. (comme sur nos smartphones :


    PARTIE GAUCHE___________PARTIE DROITE

    Le 1er janvier_______________Le 1er janvier
    Message de A_______________Message de B

    Le 2 janvier________________Le 2 janvier
    Message de A______________Message de B

    __________________________Le 3 janvier
    __________________________Message de B

    Le 4 janvier
    Message de A

    etc

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Comme ça, je dirais qu'il faudrait utiliser deux widgets Text en lecture seule cote à cote, ce sera plus simple à gérer.
    Pour faire plus jolie, Il faudrait deux canvas, donc dessiner, mais là, à coder, c'est autre chose

    Ton exemple n'est pas très clair au niveau des messages. Je vais essayer de créer deux hash. Un pour le receveur, l'autre pour l’émetteur.
    '2', '1266619337', 'test', que signifie le 2 ?

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    2 signifie que c'est un numéro extérieur qui a envoyé ce texto, 3 signifie que c'est ce téléphone qui a envoyé le texto.
    C'est pourquoi j'ai mis tous les textos et leur date ayant comme flag '2' dans le tableau @textSender et ceux ayant le flag '3' dans le tableau @textReceiver.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    J'ai un peu amélioré mon code grâce à quelques points sur la FAQ Perl/Tk :
    J'arrive maintenant à scroller correctement.
    Mais je ne parviens pas à comprendre ce qu'il faut changer pour que la fenêtre ne s'étende pas inutilement à l'horizontal, et pourquoi est-ce que le $pane ne prend pas tout l'espace disponible ?!

    Une autre petite question : est-il possible de dire à un texte de revenir à la ligne si l'espace disponible n'est pas assez grand ?

    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
    #!/usr/bin/perl
     
    # be strict
    use strict;
    use warnings;
     
    use Tk;
    use Tk::Adjuster;
     
    ##########################################################
    #														 #
    #						G U I							 #
    #														 #
    ##########################################################
     
    my $mw = new MainWindow;#ou MainWindow->new();
    $mw->title ("My frame");
    $mw->geometry("1200x600");
    my $cell;
    my @textSender;
    my @textReceiver;
    my @all_lines = (
    '2', '1266619337', 'test', 
    '3', '1266624381', 'tsdfhsldjfhnsldkflksdjflks,dfssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssk:ds,fsdfsdfsdfsdfsdfsdfest',
    '2', '1266625519', 'test',
    '3','1266662837', "test",
    '3','1266664673', "test",
    '3','1266777388', "test",
    '3',1266778423, "test",
    '2',1266787476, "tesdfffffffffffffffffffffffqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqfffffffffffffffffffffffffffft",
    '2',1266787924, "test",
    '3',1266788626, "test",
    '2',1266790411, "test",
    '3',1266796849, "test",
    '2',1266797836, "test",
    '3',1266957673, "test",
    '2',1266959468, "test",
    '3',1266962012, "test",
    '2',1266966835, "test",
    '3',1266968068, "test",
    '3',1266969797, "test",
    '3',1267005658, "test",
    '2',1267006399, "test",
    '2',1267035316, "test");
     
    for my $i (0 .. 100) {  #$#all_lines
    	$cell = $all_lines[$i];
     
    	if($i %3 == 0){#C'est un Flag
    		print $cell;
    		if($cell == "2"){ #Sender
    			push @textSender, $all_lines[$i+1];#scalar(localtime($all_lines[$i+1]));
    			print "$all_lines[$i+1]\n";
    			push @textSender, $all_lines[$i+2];
    		}
    		if($cell == "3"){#Receiver
    			push @textReceiver, scalar(localtime($all_lines[$i+1]));
    			push @textReceiver, $all_lines[$i+2];
    		}
    	}
    }
     
     
    my $main_frame = $mw->Frame()->pack(-side => 'top', -anchor => 'center', -fill => 'both');
    my $adj = $mw -> Adjuster();
     
    my $top_frame = $main_frame->Frame(-background => "red")->pack(-side => 'top',
                                                                    -fill => 'both');
    my $pane = $main_frame->Scrolled('Pane', 
      -scrollbars => 'sw',
      -sticky => 'nswe',
      -background =>  '#CCCCFF',
    )->pack( qw/ -fill both -expand 1/ );
    $pane->Frame()->pack(-expand => 1);
     
    my $cadre = $pane->LabFrame(
      -label => 'Mon titre cadre',
      -background =>  '#CCCCFF',
    )->pack( qw/ -fill both -expand 1/ );
     
    my $left_frame = $cadre->Frame(-background => "SkyBlue1")->pack(-side => 'left',
    																-fill => 'both');
    my $right_frame = $cadre->Frame(-background => "SeaGreen3")->pack(-side => "right",
    																-fill => 'both');
     
    $top_frame->Label(	-text => "Messages", 
                        -background => "red")->pack(-side => "top");
    $left_frame->Label(	-text => join("\n",@textSender),
    					-background => "SkyBlue1",
                        -foreground => "black")->pack(-side => 'top');
    $right_frame->Label(-text => join("\n",@textReceiver),
    					-background => "SeaGreen3",
                        -foreground => "black")->pack(-side => 'top');
     
    my $bouton = $mw->Button (
    				-text => "Fermer",
    				-command => sub {exit;})->pack(-side => 'bottom',
    												-ipadx => 30,
    												-ipady => 5);
     
    MainLoop;

  9. #9
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    voici un programme fait rapidement :
    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
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Tk;
    use Tk::LabFrame;
    use Tk::Adjuster;
    use Tk::ROText;
    use Tk::Pane;
    use utf8;
     
    my $mw = new MainWindow;    #ou MainWindow->new();
    $mw->title("PORTABLE");
    $mw->geometry("1200x600");
     
    my %sms_envoyeur = (
     
      # Date, message
      '1266619337' => "Message 1",
      '1266625519' => "Message 2",
      '1266787476' => "Message 3",
      '1266787924' => "Message 4",
      '1266790411' => "Message 5",
      '1266664673' => "Message 6",
      '1266966835' => "Message 7",
     
    );
    my %sms_receveur = (
     
      # Date, message
      '1266624381' => "Message 1 vxv xvx vvbnbv ncbv cb ccnvbn nvb cvbcnvbnc cvbncvbu izeyg hvxv xvx vvbnbv ncbv cb ccnvbn nvb cvbcnvbnc cvbncvbu izeyg hvxv xvx vvbnbv ncbv cb ccnvbn nvb cvbcnvbnc cvbncvbu izeyg h",
      '1266662837' => "Message 2 fnfhf fgh fgs hsfg hsgf hfgsghfqgfshgf shgfshgdfsgd hf h",
      '1266664673' => "Message 3 vxv xvx vvbnbv ncbv cb ccnvbn nvb cvbcnvbnc cvbncvbu izeyg hgzjgbjzgbj bgjdbvivbhibhvjsvbsjvb jbv ",
      '1266777388' => "Message 4",
      '1266778423' => "Message 5",
      '1266788626' => "Message 6",
      '1266796849' => "Message 7",
    );
     
    my %LesSMS = ( %sms_envoyeur, %sms_receveur );
    my $main_frame = $mw->Scrolled(
      "Pane",
      Name        => 'CadrePortable',
      -scrollbars => 'sw',
      -sticky     => 'nswe',
      -background => '#CCCCFF',
    );
    $main_frame->Frame;
    my $cadre_emmeteur = $main_frame->Scrolled('ROText',
      -background => 'white',
      -wrap => 'none',
      -scrollbars => 'osow',
    );
     
    my $cadre_receveur = $main_frame->Scrolled('ROText',
      -background => 'white',
      -wrap => 'none',
      -scrollbars => 'osow',
    );
     
    $cadre_emmeteur->tagConfigure(
      'TITRE',
      -background => '#FFFF99',
      -foreground => 'black',
      -font       => '{arial} 12 {bold}',
    );
    $cadre_receveur->tagConfigure(
      'TITRE',
      -background => '#FFFF99',
      -foreground => 'black',
      -font       => '{arial} 12 {bold}',
    );
    $cadre_emmeteur->tagConfigure(
      'EMMETTEUR',
      -background => '#CCCCFF',
      -font       => '{arial} 12 {normal}',
    );
    $cadre_receveur->tagConfigure(
      'RECEVEUR',
      -background => '#CCFF99',
      -font       => '{arial} 12 {normal}',
    );
     
    # Insertion des messages
    foreach ( keys %LesSMS ) {
      $cadre_emmeteur->insert( 'end', "\n" );
      $cadre_receveur->insert( 'end', "\n" );
    }
    my ( $compteur_emmeteur, $compteur_receveur ) = ( 2, 2 );
    my $journee_emmeteur;
    my $journee_receveur;
    $cadre_emmeteur->insert( '1.10', "EMMETEUR\n", 'TITRE' );
    $cadre_receveur->insert( '1.10', "RECEVEUR\n", 'TITRE' );
    foreach my $temps ( sort { $a <=> $b } keys %LesSMS ) {
      my $message;
      if ( $sms_envoyeur{$temps} ) {
        $message = '[' . date($temps)->{"date-heure"} . '] ' . $sms_envoyeur{$temps};
        $cadre_emmeteur->insert( "$compteur_emmeteur.0", "$message\n", 'EMMETTEUR' );
        $journee_emmeteur = date($temps)->{"date"};
      }
      if ( $sms_receveur{$temps} ) {
        $message = '[' . date($temps)->{"date-heure"} . '] ' . $sms_receveur{$temps};
        $cadre_receveur->insert( "$compteur_receveur.0", "$message\n", 'RECEVEUR' );
        $journee_receveur = date($temps)->{"date"};
      }
      $compteur_emmeteur++;
      $compteur_receveur++;
    }
     
    # Emplacement des widgets
    $main_frame->pack(qw/ -fill both -expand 1/);
    $cadre_emmeteur->pack(qw/ -side left -fill both -expand 1/);
    $cadre_receveur->pack(qw/ -side right -fill both -expand 1/);
     
    MainLoop;
     
    sub date {
      my $time = shift || time;    #$time par defaut vaut le time actuel
      my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
        = localtime($time);
      $mois  += 1;
      $annee += 1900;
     
      # On rajoute 0 si le chiffre est compris entre 1 et 9
      foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) {
        s/^(\d)$/0$1/;
      }
     
      my %ladate = (
        "date"         => "$jour-$mois-$annee",
        "heure"        => "$heure:$minute:$seconde",
        "date-heure"   => "$jour/$mois/$annee $heure:$minute:$seconde",
        "jour_semaine" => $jour_semaine,
        "jour_annee"   => $jour_annee,
        "hiverOuEte"   => $heure_hiver_ou_ete,
      );
      return \%ladate;
    }

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup djibril !
    Je suis impressionné par la vitesse de compréhension ET d'exécution !
    C'est exactement cela que je voulais faire.

    J'ai quand même continué dans la lignée de ce que je faisais, ça correspond mieux à l'idée esthétique que je m'étais fait. (voir le code joint)
    J'ai utilisé ta fonction pour les heures et dates, fonction dont j'ai encore du mal à comprendre le fonctionnement (je crois que je suis pas encore prêt pour le Perl :p ).
    Et pour ce qui est d'alterner les messages en fonction de la date, j'ai pas encore trouvé. Le mieux sera sans doute que je transforme comme toi mes Label en Text, plus facile à manipuler.

    J'ai un autre problème : je voudrais pouvoir scroller avec la souris, or les fonctions que j'utilise semblent ne pas marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $left_frame->bind("<Button-4>", sub { $left_frame->yviewScroll(1,"un
    +its") });
    $left_frame->bind("<Button-5>", sub { $left_frame->yviewScroll(-1,"u
    +nits") });
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $left_frame->bind("<Button-4>", sub { $left_frame->yview(1,"un
    +its") });
    $left_frame->bind("<Button-5>", sub { $left_frame->yview(-1,"u
    +nits") });
    As-tu une idée ?

    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
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    #!/usr/bin/perl
     
    # be strict
    use strict;
    use warnings;
     
    use Tk;
    use Tk::Adjuster;
    use Tk::Pane;
    use Tk::Text;
    use utf8;
    use Encode;
     
    ##########################################################
    #														 #
    #						G U I							 #
    #														 #
    ##########################################################
     
    my $mw = new MainWindow;#ou MainWindow->new();
    $mw->title ("My frame");
    $mw->geometry("1250x600");
    my $cell;
    my @textSender;
    my @textReceiver;
    my @all_lines = (
    '2', '1266619337', 'test', 
    '3', '1266624381', 'tsdfhsldjfhnsldkflksdjflks,dfssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssk:ds,fsdfsdfsdfsdfsdfsdfest',
    '2', '1266625519', 'test',
    '3','1266662837', "test",
    '3','1266664673', "test",
    '3','1266777388', "test",
    '3',1266778423, "test",
    '2',1266787476, "tesdfffffffffffffffffffffffqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqfffffffffffffffffffffffffffft",
    '2',1266787924, "test",
    '3',1266788626, "test",
    '2',1266790411, "test",
    '3',1266796849, "test",
    '2',1266797836, "test",
    '3',1266957673, "test",
    '2',1266959468, "test",
    '3',1266962012, "test",
    '2',1266966835, "test",
    '3',1266968068, "test",
    '3',1266969797, "test",
    '3',1267005658, "test",
    '2',1267006399, "test",
    '2',1266797836, "test",
    '3',1266957673, "test",
    '2',1266959468, "test",
    '3',1266962012, "test",
    '2',1266966835, "test",
    '3',1266968068, "test",
    '3',1266969797, "test",
    '3',1267005658, "test",
    '2',1267006399, "test",
    '2',1266797836, "test",
    '3',1266957673, "test",
    '2',1266959468, "test",
    '3',1266962012, "test",
    '2',1266966835, "test",
    '3',1266968068, "test",
    '3',1266969797, "test",
    '3',1267005658, "test",
    '2',1267006399, "test",
    '2',1266797836, "test",
    '3',1266957673, "test",
    '2',1266959468, "test",
    '3',1266962012, "test",
    '2',1266966835, "test",
    '3',1266968068, "test",
    '3',1266969797, "test",
    '3',1267005658, "test",
    '2',1267006399, "test",
    '2',1267035316, "test");
     
    for my $i (0 .. $#all_lines) {  #$#all_lines
    	$cell = $all_lines[$i];
     
    	if($i %3 == 0){#C'est un Flag
    		if($cell == "2"){ #Sender
    			push @textSender, '['.date($all_lines[$i+1])->{"date-heure"}.']';#scalar(localtime($all_lines[$i+1]));
    			push @textSender, $all_lines[$i+2];
    		}
    		if($cell == "3"){#Receiver
    			push @textReceiver, '['.date($all_lines[$i+1])->{"date-heure"}.']';
    			push @textReceiver, $all_lines[$i+2];
    		}
    	}
    }
     
    my $adj = $mw -> Adjuster();
     
    my $top_frame = $mw->Frame(
    	-background => "red"
    )->pack(-side => 'top', -fill => 'both');
     
    my $pane = $mw->Scrolled(
    	'Pane', 
    	-scrollbars => 'w',
    	-sticky => 'nswe',
    	-background =>  '#CCCCFF',
    )->pack( qw/ -fill both -anchor center -expand 1/ );
     
    my $cadre = $pane->LabFrame(
    	-label => 'Mon titre cadre',
    	-background =>  '#CCCCFF',
    )->pack( qw/ -fill both -anchor center -expand 1/ );
     
    my $left_frame = $cadre->Frame(-background => "SkyBlue1")->pack(-side => 'left',
    																-fill => 'both');
    my $right_frame = $cadre->Frame(-background => "SeaGreen3")->pack(-side => "right",
    																-fill => 'both');
     
    $top_frame->Label(	-text => "Messages", 
                        -background => "red")->pack(-side => "top");
    $left_frame->Label(	-text => join("\n",@textSender),
    					# -width  => 50,
    					# -height => 10,
    					-justify    => 'left',
    					-wrap		=> 600,
    					-background => "SkyBlue1",
                        -foreground => "black")->pack(-side => 'top');
     
    $right_frame->Label(-text => join("\n",@textReceiver),
    					-justify    => 'right',
    					-wrap		=> 600,
    					-background => "SeaGreen3",
                        -foreground => "black")->pack(-side => 'top');
     
    #Pour prendre en compte le scroll de la souris
    $left_frame->bind("<Button-4>", sub { $left_frame->yviewScroll(1,"un
    +its") });
    $left_frame->bind("<Button-5>", sub { $left_frame->yviewScroll(-1,"u
    +nits") });
     
    my $bouton = $mw->Button (
    	-text => "Fermer",
    	-takefocus => 1,
    	-command => sub {exit;}
    )->pack(-side => 'bottom', -fill => 'x', -ipady => 5);
     
    MainLoop;
     
    sub date {
      my $time = shift || time;    #$time par defaut vaut le time actuel
      my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
        = localtime($time);
      $mois  += 1;
      $annee += 1900;
     
      # On rajoute 0 si le chiffre est compris entre 1 et 9
      foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) {
        s/^(\d)$/0$1/;
      }
     
      my %ladate = (
        "date"         => "$jour-$mois-$annee",
        "heure"        => "$heure:$minute:$seconde",
        "date-heure"   => "$jour/$mois/$annee $heure:$minute:$seconde",
        "jour_semaine" => $jour_semaine,
        "jour_annee"   => $jour_annee,
        "hiverOuEte"   => $heure_hiver_ou_ete,
      );
      return \%ladate;
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/07/2013, 17h07
  2. Fenêtres MDI mal organisées
    Par amirad dans le forum VB.NET
    Réponses: 1
    Dernier message: 11/09/2009, 10h26
  3. Organiser les fentres d'une interface
    Par thaundeadboss dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 20/03/2008, 19h15
  4. [GTKAda] Problème d'organisation dans une fenêtre
    Par Poseidon62 dans le forum Ada
    Réponses: 1
    Dernier message: 12/03/2007, 14h03

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