Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Interfaces Graphiques
Interfaces Graphiques Forum d'entraide pour les interfaces graphiques en Perl (TK, GTK, Tk-Zinc, 2D et 3D avec OpenGPL, ....). Avant de poster, veuillez consulter la FAQ Perl/Tk , les cours Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/12/2012, 10h17   #1
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 24
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
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 !
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 11h29   #2
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 571
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 571
Points : 31 788
Points : 31 788
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 11h50   #3
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 24
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
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;
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 11h55   #4
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 571
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 571
Points : 31 788
Points : 31 788
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 12h29   #5
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 24
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
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 :

Citation:

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
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 13h22   #6
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 571
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 571
Points : 31 788
Points : 31 788
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 13h37   #7
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 24
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
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.
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 14h35   #8
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 24
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
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;
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 14h45   #9
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 571
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 571
Points : 31 788
Points : 31 788
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 17h23   #10
Sphaxounet
Nouveau Membre du Club
 
Homme Vincent Sphax
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Vincent Sphax
Âge : 24
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 31
Points : 31
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;
}
Sphaxounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h06.


 
 
 
 
Partenaires

Hébergement Web