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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    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 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    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 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

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

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    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 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    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 ?

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