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

Tkinter Python Discussion :

Tkinter et problème de résolution


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Tkinter et problème de résolution
    Bonjour,
    Je suis en train de développer un logiciel avec Tkinter pour l'interface graphique,
    et un problème majeur se pose:
    mon logiciel est conçu graphiquement selon mon écran et ma résolution...
    Donc quand quelqu'un d'autre va essayer mon logiciel, si sa résolution est plus grande, la fenêtre sera entourée d'une grosse barre grise (pas trop embêtant) par contre si la résolution est trop petite, la fenêtre ne rentrera pas dans l'écran...
    Existe-t-il un moyen pour que tous les widgets se mettent en taille maximale en se grossissant et se réduisant en fonction de l'ordinateur de l'utilisateur?
    J'avais trouvé sur le site la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.wm_state(newstate="zoomed")
    mais cela met la fenêtre en plein écran comme si l'utilisateur cliquez sur "Agrandir", mais les widgets restent à la même taille...
    Autrement j'avais trouvé un moyen tout bête: c'est de définir la taille des widgets en fonctions de la résolution de l'écran.
    Taille que je récupérais grâce à la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f.winfo_screenheight()
    f.winfo_screenwidth()
    mais un problème se pose, ça marche très bien sauf pour les images...
    Alors donc s'il n'existe pas de solution à ma précédente question, existe-t-il un moyen de définir la taille d'une image qu'on insère comme pour n'importe quel autre widget...

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    J'ai essayé mais ça ne marche pas, le widget reste à la même taille...
    Du moins ce que j'ai pu comprendre ne marche pas...
    Pourriez vous me l'expliquer plus clairement que le tutoriel que vous m'avez indiqué, et surtout en français SVP...
    Merci
    PS: je me sert de ce petit programme comme test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from Tkinter import *
    f=Tk()
    can=Canvas (f, bg='black', height=200,width=600)
    can.create_text(30, 30, anchor =NW, text ='Un ptit texte',font=('Papyrus', 30, 'normal'), fill ='red')
    can.create_text(30, 70, anchor =NW, text ='Un ptit texte',font=('Papyrus', 30, 'normal'), fill ='blue') 
    can.grid()
     
    f.mainloop()
    En temps normal, le canevas prend toute la fenêtre et quand je clique sur "Agrandir", le canevas garde la même taille et se retrouve au centre d'un océan de gris...

  4. #4
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from Tkinter import *
    f=Tk()
    f.rowconfigure(0,weight=1)
    f.columnconfigure(0,weight=1)
    can=Canvas (f, bg='black', height=200,width=600)
    can.create_text(30, 30, anchor =NW, text ='Un ptit texte',font=('Papyrus', 30, 'normal'), fill ='red')
    can.create_text(30, 70, anchor =NW, text ='Un ptit texte',font=('Papyrus', 30, 'normal'), fill ='blue') 
    can.grid(sticky=NSEW)
     
    f.mainloop()
    Ne pas oublier le "sticky".

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Ok Merci beaucoup... ça marche super bien... Le top!
    Par contre pour les images ça ne marche pas...
    Si j'utilise ça, l'image reste de la même taille et ne rentre pas dans le canevas...
    Idem pour les texte construit avec create_texte.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    C'est normal, pour le texte tu lui assignes une font de 30, donc ça sera toujours 30 quelque soit la taille de la fenêtre, et pour les images c'est pareil, elles ont une taille défini. Il faudra donc les changer "manuellement".
    Pour modifier la taille des images tu peux utiliser le module PIL.
    Personnellement, je trouve bizarre le fait de modifier la taille du texte et des images en fonction de la taille de la fenêtre, mais tu dois avoir une bonne raison.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Je pense que ça risque d'être trop complexe de faire tout ça...
    Je ferait un message qui apparaitra lorsque l'utilisateur aura une résolution plus faible et qui conseillera à l'utilisateur de la changer...
    ça va, ce n'est pas la mort de changer sa résolution le temps d'utiliser un logiciel...

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Il est plutôt d'usage d'utiliser des scrollbars. Sinon prévois que ton application fonctionne en 800*600.

  9. #9
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Si c'est pour avoir une image qui est redimensionnée en fonction de la taille du canvas, voici un exemple vite fait :
    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
    #!/usr/bin/python
     
    # -*- coding: utf-8 -*-
     
     
     
    from Tkinter import *
     
    from PIL import Image, ImageTk
     
     
     
    class Application:
     
    	def __init__(self):
     
    		self.root=Tk()
     
    		self.root.rowconfigure(0,weight=1)
     
    		self.root.columnconfigure(0,weight=1)
     
    		my_file = "test.jpg"
     
    		self.image = Image.open(my_file)
     
    		self.can=Canvas(self.root)
     
    		self.can.bind("<Configure>",self.resize)
     
    		self.can.grid(sticky=NSEW)
     
     
    		self.can.create_text(30, 30, anchor =NW, text ='Un ptit texte',font=('Papyrus', 30, 'normal'), fill ='red')
     
    		self.can.create_text(30, 70, anchor =NW, text ='Un ptit texte',font=('Papyrus', 30, 'normal'), fill ='blue') 
     
     
    	def resize(self,event):
     
    		self.img=self.image.resize((event.width,event.height))
     
    		self.mon_image = ImageTk.PhotoImage(self.img)
     
    		self.can.create_image(0, 0, image=self.mon_image, anchor=NW)
     
     
    		self.can.tag_lower(fond)		#Place l'image sous les autres items
    app=Application()
     
    app.root.mainloop()

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

Discussions similaires

  1. [css] problème à grandes résolutions
    Par gorgonite dans le forum Mise en page CSS
    Réponses: 21
    Dernier message: 16/06/2006, 16h21
  2. Réponses: 1
    Dernier message: 11/05/2006, 15h17
  3. [C#]problème de résolution d'écran
    Par erazorhead dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/04/2006, 13h51
  4. Réponses: 3
    Dernier message: 02/02/2006, 12h03
  5. Probléme de résolution avec virtual PC
    Par wikers dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 19/08/2005, 10h04

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