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 :

Image comme fond


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut Image comme fond
    Bonjour,
    m'étant remis a perl depuis peut, je voudrais afficher une image comme un fond de façon a ce que je puisse avoir des boutons et autes widgets par dessus mais je ne sais pas comment faire, quelqu'un saurait-t-il m'aider ?
    Merci.

  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
    C'est possible mais un peu complexe à faire.

    Je suppose que ton image est grande, tu devras donc faire un label avec -image à la place de -text. L'image occupera donc toute ta fenêtre. Ensuite, pour placer les autres widgets par dessus l'image, tu devras utiliser le gestionnaire d'espace place à la place de pack ou grid. C'est le seul moyen de superposer des widgets. Tu devras donc jouer ensuite avec les coordonnées pour faire tes placements.

  3. #3
    Membre du Club Avatar de Perl53
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 109
    Points : 51
    Points
    51
    Par défaut
    merci c'est vrai que avec grid ou pack, je n'avait pas du tout les résultats que je voulait

  4. #4
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    arf, c'est justement la question que j'allais poser...

    mais depuis que tu m'as poussé à utiliser pack et grid j'ai pu trop envie de revenir à place...

    Par contre idée (en écrivant lol) ne pourrait on pas faire le fond avec label comme tu dis, puis faire une frame générale par dessus placée avec place et ensuite utiliser pack et grid dans cette frame...?

    Je vais testé ça
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  5. #5
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    Bon c'est pas très concluant...

    ça marche en soit mais plusieurs problèmes se posent:

    1/ les wigets que l'on rajoute par dessus l'image de fond e peuvent pas être définis avec un fond transparent (à part Frame...), donc ça réduit considérablement le concept...

    2/ le redimensionnement de l'image ne va pas être facile, tel quel c'est pas faisable...

    Du coup perso je vais chercher la possibilité de gérer non pas une mais des morceaux d'images (un peu comme une page html...), par contre je ne sais pas comment intercepter le clic sur les boutons minimize et maximize du mw ... ? J'ai vu qu'avec le protocol DELETE on pouvait, mais comment se nomme les protocols pour ces deux boutons? je ne trouve rien sur le net...?
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  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
    Citation Envoyé par Viduc Voir le message
    Bon c'est pas très concluant...

    ça marche en soit mais plusieurs problèmes se posent:

    1/ les wigets que l'on rajoute par dessus l'image de fond e peuvent pas être définis avec un fond transparent (à part Frame...), donc ça réduit considérablement le concept...

    2/ le redimensionnement de l'image ne va pas être facile, tel quel c'est pas faisable...

    Du coup perso je vais chercher la possibilité de gérer non pas une mais des morceaux d'images (un peu comme une page html...), par contre je ne sais pas comment intercepter le clic sur les boutons minimize et maximize du mw ... ? J'ai vu qu'avec le protocol DELETE on pouvait, mais comment se nomme les protocols pour ces deux boutons? je ne trouve rien sur le net...?
    Ce serait intéressant de nous donner des exemples de codes, histoire que l'on puisse tester.

  7. #7
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    En effet honte à moi!!!! je crois que là tu aurais pu sortir le fouet tu sais

    en faite j'ai hésité mais je pensais pas que ça vous intéresserais...

    voilà une idée de code:

    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
    use strict;
     
    use Tk; use Tk::Photo; use Tk::JPEG;  use Tk::Pane;
     
     
     
    # -- Définition des Variables Tk -- #
     
    my ($Fenetre_Principale, $Label_FOND, $Frame_Principale, $Label_TEST);
     
    my ($Image_FOND);
     
     
     
    # -- Création de la fenêtre principale -- #
     
    $Fenetre_Principale = MainWindow->new();
     
    $Fenetre_Principale -> minsize('800','600');
     
    $Fenetre_Principale -> title("test fond image");
     
    #$Fenetre_Principale -> protocol("WM_DELETE_WINDOW", sub {return;});
     
     
     
    # -- Création de Label Fond -- #
     
    $Image_FOND = $Fenetre_Principale -> Photo( -file => "D:/DATA/Images/fond.jpg", -height => 600, -width => 800);
     
    $Image_FOND -> redither;
     
    $Label_FOND = $Fenetre_Principale -> Label(-image => $Image_FOND, -justify => 'center');
     
    $Label_FOND -> pack(-side => 'left', -fill => 'both', -anchor => 'nw', -expand => 0);
     
     
     
    # -- Création de la Frame Principale -- #
     
    $Frame_Principale = $Label_FOND -> Frame(-background => '');
     
    $Frame_Principale -> place(-x => 0, -y => 0, -width => 800, -height => 600);
     
     
     
    # -- Création d'un label test -- #
     
    $Label_TEST = $Frame_Principale -> Label(-text => "ceci est un test", -background => 'white');
     
    $Label_TEST -> pack(-side => 'top', -anchor => 'n', -expand => 0);
     
    #============================
     
    # -- Lanceur d'évènement -- #
     
    #============================
     
    MainLoop;
    J'ai mit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Fenetre_Principale -> protocol("WM_DELETE_WINDOW", sub {return;});
    en commenter car ça ne marche pas... mais je pense creuser par là si je trouve comment faire pour intercepter cette fonction (protocol)... car il semblerait que l'on puisse agrandire, copier coller etc... les images dans le script donc il y aurait un truc à faire par là...
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  8. #8
    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
    Voilà un petit script qui redimensionne l'image à chaque modification de taille de la fenêtre. Bon, ce n'est pas très optimum, c'est juste pour s'amuser un peu. Il faut que tu installes le module PerlMagick.

    Test et dis moi ce que tu en penses :

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Tk;
    use Tk::Photo;
    use Tk::JPEG;
    use Image::Magick;
    use File::Temp;
     
    my $image = 'D:/DATA/Images/fond.jpg';
     
    # -- Création de la fenêtre principale -- #
    my $Fenetre_Principale = MainWindow->new();
    $Fenetre_Principale->minsize( '800', '600' );
    $Fenetre_Principale->title("test fond image");
    $Fenetre_Principale->protocol( "WM_DELETE_WINDOW", sub { return; } );
     
    # -- Création de Label Fond -- #
    my $Image_FOND = $Fenetre_Principale->Photo( -file => $image );
    my $Label_FOND = $Fenetre_Principale->Label( -image => $Image_FOND, -justify => 'center' );
     
    # -- Création de la Frame Principale -- #
    my $Frame_Principale = $Fenetre_Principale->Frame();
     
    my $bouton_exit = $Frame_Principale->Button( -text => 'Quitter', -command => sub { exit; } );
     
    # -- Création d'un label test -- #
    my $Label_TEST = $Frame_Principale->Label( -text => 'ceci est un test', -background => 'white' );
     
    $Label_FOND->pack(qw/ -fill both -expand 1 /);
    $Frame_Principale->place( -relx => 0.5, -rely => 0.5, );
    $Label_TEST->pack(qw/-side top /);
    $bouton_exit->pack(qw/-side bottom/);
     
    # Update de la fenetre afin de récupérer la taille de l'image
    $Fenetre_Principale->update;
    my ( $largeur, $hauteur ) = ( $Fenetre_Principale->width, $Fenetre_Principale->height );
     
    # Redimensionner l'image à chaque fois que la taille du widget change.
    $Fenetre_Principale->Tk::bind(
      '<Configure>' => [
        \&RedimensionnerImage,
        { image        => $image,
          image_fond   => $Image_FOND,
          label_fond   => $Label_FOND,
          ref_largeur  => \$largeur,
          ref_longueur => \$hauteur,
        }
      ],
    );
     
    MainLoop;
     
    # Redimmensionner l'image à chaque fois que la taille du widget change.
    sub RedimensionnerImage {
      my ( $widget, $information_ref ) = @_;
     
      my $image      = $information_ref->{image};
      my $Image_FOND = $information_ref->{image_fond};
      my $Label_FOND = $information_ref->{label_fond};
      my $largeur    = ${ $information_ref->{ref_largeur} };
      my $hauteur    = ${ $information_ref->{ref_longueur} };
     
      # Calcul de la taille du widget
      my $largeur_widget = $widget->width;
      my $hauteur_widget = $widget->height;
     
      #print "$largeur_widget == $largeur and $hauteur_widget == $hauteur\n";
      # Eviter les boucles infinies
      if ( $largeur_widget == $largeur and $hauteur_widget == $hauteur ) {
        return;
      }
     
      # On crée une nouvelle image redimensionnée à cette taille
      my $Magick = new Image::Magick;
      $Magick->Read($image);
      $Magick->Resize( width => $largeur_widget, height => $hauteur_widget );
      my ($extension) = $image =~ m{(\.\w+)$};
      my ( $fh, $filename ) = File::Temp::tempfile( SUFFIX => $extension, UNLINK => 1 );
      close($fh);
      $Magick->Write($filename);
     
      $Image_FOND = $widget->Photo( -file => $filename );
      $Label_FOND->configure( -image => $Image_FOND, );
      unlink $filename;
     
      $largeur = $largeur_widget;
      $hauteur = $hauteur_widget;
     
      return;
    }

  9. #9
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    J'essais de tester mais impossible d'installer ce fameux module... je retesterais ce we si j'ai un moment et je mettrais ce que ça donne,

    si ça marche vu le code ça peut être une bonne option, certes ça alourdit le code mais ça peut être simpa
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  10. #10
    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 le repository trouchelle ?

  11. #11
    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

  12. #12
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    ok je passe vite fait je viens de tester en arrivant au boulot

    ça a l'air de marcher, le premier clique m'a bien redimensionner le tout mais quand j'ai voulu ragrandir il est partit en boucle ... enfin ceci dit le principe fonctionne donc je vais creuser
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  13. #13
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    bon j'ai essayé de revoir un peu le code ce soir, mais comme le code je tourne en rond...

    j'ai tenté de rajouté des controles sur ta ligne pour éviter les boucles mais ça ne change rien... ça ne te le fait pas chez toi?
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

  14. #14
    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
    Non chez moi, ça ne boucle pas à l'infini, mais le script fonctionne tout de même bizarrement. De toute façon, je ne te conseil pas son utilisation en prod. Si tu souhaites vraiment faire ce genre de chose, je pense que le mieux est de fixer définitivement la taille du widget et d'avoir une image de cette taille. L'inconvénient est que l'utilisateur ne pourra pas modifier la taille de la fenêtre.

  15. #15
    Rédacteur
    Avatar de Viduc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    1 445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2009
    Messages : 1 445
    Points : 2 778
    Points
    2 778
    Billets dans le blog
    2
    Par défaut
    je suis assez d'accord avec toi, je n'ai pas encore décidé si j'allais la fixer définitivement ou pas mais comme mon appli sert en "libre service" je pourrais très bien le faire en fixe oui...
    Bien reçu, tous les messages. Ils disent qu’ils ont compris, qu’il n’y a plus le choix. Que l’esprit qui souffle, guidera leurs pas. Qu’arrivent les derniers temps où nous pourrons parler. Alors soyons désinvoltes, n’ayons l’air de rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Charger image bmp comme fond de fenêtre display
    Par vasilpapa dans le forum Haskell
    Réponses: 3
    Dernier message: 30/01/2015, 10h10
  2. [Débutant] charger une image comme image de fond d'un formulaire
    Par djelloharmel dans le forum VB.NET
    Réponses: 2
    Dernier message: 22/02/2012, 10h22
  3. Réponses: 1
    Dernier message: 10/02/2012, 09h57
  4. utiliser une image comme fond d'une interface graphique
    Par élève_ingénieur dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 01/12/2009, 21h28
  5. [Beamer] Image transparente comme fond de slide
    Par statquant dans le forum Beamer
    Réponses: 3
    Dernier message: 26/09/2007, 17h38

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