Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Nouveau Membre du Club
    Homme Profil pro Vincent Sphax
    Étudiant
    Inscrit en
    avril 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Sphax
    Âge : 26
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : avril 2012
    Messages : 42
    Points : 29
    Points
    29

    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 :
    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
    16 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 570
    Points : 465 303
    Points
    465 303

    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.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  3. #3
    Nouveau Membre du Club
    Homme Profil pro Vincent Sphax
    Étudiant
    Inscrit en
    avril 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Sphax
    Âge : 26
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : avril 2012
    Messages : 42
    Points : 29
    Points
    29

    Par défaut

    Merci djibril.
    J'ai rempli le tableau en dur car je ne peux pas vous transmettre la bdd.

    Code :
    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
    16 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 570
    Points : 465 303
    Points
    465 303

    Par défaut

    Ok, j'ai bien le programme qui s'ouvre bien.
    Qu'est-ce que tu souhaites ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  5. #5
    Nouveau Membre du Club
    Homme Profil pro Vincent Sphax
    Étudiant
    Inscrit en
    avril 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Sphax
    Âge : 26
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : avril 2012
    Messages : 42
    Points : 29
    Points
    29

    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
    16 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 570
    Points : 465 303
    Points
    465 303

    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 ?

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  7. #7
    Nouveau Membre du Club
    Homme Profil pro Vincent Sphax
    Étudiant
    Inscrit en
    avril 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Sphax
    Âge : 26
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : avril 2012
    Messages : 42
    Points : 29
    Points
    29

    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
    Nouveau Membre du Club
    Homme Profil pro Vincent Sphax
    Étudiant
    Inscrit en
    avril 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Sphax
    Âge : 26
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : avril 2012
    Messages : 42
    Points : 29
    Points
    29

    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 :
    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
    16 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 570
    Points : 465 303
    Points
    465 303

    Par défaut

    voici un programme fait rapidement :
    Code :
    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;
    }

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  10. #10
    Nouveau Membre du Club
    Homme Profil pro Vincent Sphax
    Étudiant
    Inscrit en
    avril 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent Sphax
    Âge : 26
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : avril 2012
    Messages : 42
    Points : 29
    Points
    29

    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 :
    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 :
    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 :
    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;
    }

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •