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.
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.
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.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
merci c'est vrai que avec grid ou pack, je n'avait pas du tout les résultats que je voulait
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
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
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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:
J'ai mit
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;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à...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $Fenetre_Principale -> protocol("WM_DELETE_WINDOW", sub {return;});
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
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; }
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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
as tu le repository trouchelle ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Essayeppm install http://www.bribes.org/perl/ppm/Image-Magick.ppd
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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
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
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.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager