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] Frame et .grid()


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Par défaut [Tkinter] Frame et .grid()
    Bonjour,

    Je débute en python, Tkinter.

    J'ai trouvé un exemple de GUI créee à partir d'une classe. Je la tripatouille afin d'essayer de comprendre.

    Dans le code qui suit je n'arrive pas à placer mon Frame en haut à gauche de la fenêtre principale.

    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
     
    import Tkinter #>> oblige a une syntaxe pointee: plus claire
     
    class gui(Tkinter.Tk):
     
    	# le constructeur
    	def __init__(self, parent):
     
    		# appel au constructeur de la classe parente
    		Tkinter.Tk.__init__(self, parent)
    		# garder une ref de notre "parent"
    		self.parent= parent
     
    		# appel a la methode d'initialisation
    		self.initialize()
     
    	# Les methodes
    	def initialize(self):
    		# creation et ajout d'un layout_manager sur self (equivalent a la racine)
    		self.grid()
     
    		# creation et ajout d'un widget Frame sur le layout_manager
    		self.frm_01= Tkinter.Frame(self, width= 400, height= 100, relief= "solid", bg= 'red', bd= 1) # creation ds le self (equivalent a racine)
    		self.frm_01.grid(row= 0, column= 0, sticky= "N") # disposition sur le layout_manager
     
    # Corps principal du programme
     
    if __name__== "__main__":
     
    	# instanciation de la classe, aucun parent car c'est la fenetre de base
    	racine= gui(None)
     
    	# attributs de la fenetre principale (racine)
    	racine.geometry("800x600+10+ 100")
    	racine.title("racine= root (de la classe gui)")
     
    	# on boucle sur l'appli
    	racine.mainloop()
    Mon Frame est bien crée mais reste obstinément centré dans la fenetre principale.

    J'ai vraiment recherché et n'ai pas trouvé d'exemple correspondant à mon problème. Beaucoup trop d'exemples st à partir de scripts.

    Vous auriez des explications s'il vous plait.

    Merci bien
    areuh

  2. #2
    Membre confirmé Avatar de perchman
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 199
    Par défaut
    Bonsoir,

    je pense que le fait que tu n'es qu'un seul frame dans ta fenetre et rien d'autre ne te permet pas de le placer en haut à gauche...

    Mais tu devrais essayé sur des exemples plus simples !!


    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Par défaut
    Salut Perchman,

    Merci de la réponse.
    Alors, je m'etais aperçu qu'avec 1 seule Frame de dimensions équivalentes à la fenetre principale (nommée racine), le widdet Frame était positionné correctement. Avec ta réponse, cela fonctionne, je mets 2 Frame l'une à côté de l'autre, les dimensionne pour qu'elles occupent tout l'espace de la fenetre principale (nommée racine) et ça fonctionne.
    Dc il faut obligatoirement que tout l'espace de la fenetre principale (ici nommée racine) soit occupée
    Ok, nickel.

    Que veux tu dire par des exemples moins complexes?
    Pourquoi mon bout de code est complexe?

    Je recherche surtout des exemples avec des classes et pas seulement des scripts.

    Enfin derniere question.
    si j'essaye de placer un bouton sur une de mes 2 Frame, cette derniere prend les dimensions du bouton, est ce normal?

    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
     
    import Tkinter #>> oblige a une syntaxe pointee: plus claire
     
    class gui(Tkinter.Tk):
     
    	# le constructeur
    	def __init__(self, parent):
     
    		# appel au constructeur de la classe parente
    		Tkinter.Tk.__init__(self, parent)
    		# garder une ref de notre "parent"
    		self.parent= parent
     
    		# appel a la methode d'initialisation
    		self.initialize()
     
    	# Les methodes
    	def initialize(self):
    		self.presentation()
     
    	def presentation(self):
     
    		# creation et ajout d'un layout_manager sur self (equivalent a la racine)
    		self.grid()
     
    		# creation et ajout d'un widget Frame sur le layout_manager
    		self.frm_01= Tkinter.Frame(self, width= 400, height= 600, relief= "solid", bg= 'red', bd= 1) # creation ds le self (equivalent a racine)
    		self.frm_01.grid(row= 0, column= 0, sticky= "N") # disposition sur le layout_manager
     
    		# creation et ajout d'un second widget Frame sur le layout_manager
    		self.frm_02= Tkinter.Frame(self, width= 400, height= 600, relief= "solid", bg= 'blue', bd= 1) # creation ds le self (equivalent a racine)
    		self.frm_02.grid(row= 0, column= 1, sticky= "N") # disposition sur le layout_manager
     
    		# creation et ajout d'un layout_manager sur frm_01
    		self.frm_01.grid()
     
    		# creation et ajout d'un widget Button
    		self.btn_01= Tkinter.Button(self.frm_01, text= "Catalogue")
    		self.btn_01.grid(row= 0, column= 2, sticky= "S") #
     
    # Corps principal du programme
     
    if __name__== "__main__":
     
    	# instanciation de la classe, aucun parent car c'est la fenetre de base
    	racine= gui(None)
     
    	# attributs de la fenetre principale (racine)
    	racine.geometry("800x600+10+ 100")
    	racine.title("racine= root (de la classe gui)")
     
    	# on boucle sur l'appli
    	racine.mainloop()

    Merci pour les réponses, Perchman ou qqu' un d'autre.
    a+
    areuh

  4. #4
    Membre confirmé Avatar de perchman
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 199
    Par défaut
    Je ne savais pas que tu voulais des classes à tout prix, sinon, je pense qu'il est assez simple !! J'entendais par simple le fait d'utliser une fenetre avec à l'interieur juste de quoi faire des tests avec des frames et des boutons pour bien saisir le principe !!


    Sinon, pour palier à ton problème de bouton, tu peux donner une dimension à ton bouton !!! (je ne sais pas s'il existe une autre solution)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b11=Button(f1,width=257,height=400,text='test',font=('Chiller',15))
    f est mon frame !!

    j'ai pas le temps de tester, mais ça doit marcher

    Bon courage

    Perchman

    PS: je pars en WE donc pas internet pendant 2 jours

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Par défaut
    Salut,

    Perchman,

    Aprés cette réponse je mettrai un [RESOLU], le problème d'origine étant réglé, mais bon... je trouve pas les solutions satisfaisantes quoi qu'il soit un peu logique (peut-être) de DEVOIR occuper tout l'espace de la fenetre principale (nommée "racine" dans mon cas vous vous en rappellez)

    Perchman, Désolé mais si tu lis correctement, je n'ai aucun problème de Button mais de Frame qui se redimensionne automatiquement à son contenu (je vais tester avec "resizable", je viens de le voir sur un exemple).

    Sinon en ce qui concerne la taille des boutons: une question:
    Je définis une taille de 50 par 50 pour le bouton et celui-ci est plus grand que mes Frame (je ne plaisante pas) alors que mes Frame ont un "height" de 600.
    D'ou vient cette "incompréhension", les tailles boutons s'expriment elles en % par rapport à la taille de leur contenant ou qque chose ds le genre..?

    Voili, voilou,

    De mémoire, je ne me rappelle pas avoir autant galéreé avec Java (j' en ai fait 3 mois , il y a + de 5 ans), je vais peut-être voir du côté de wxpython pour les interfaces graphiques, je vais peut-être continuer avec Tkinter, je sais pas trop

    Ah oui, question qui a son importance... est il possible de trouver un dictionnaire des méthodes de chaque classe python? Avec Java je sais qu'on les trouve sur Google. C'est dispo avec Python qque part?

    Merci bien
    a+
    areuh

  6. #6
    Membre confirmé Avatar de perchman
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 199
    Par défaut
    Pour ton problème de boutton, je comprends pas trop ce qu'il peut bien se passer pour que le bouton soit plus grand...

    Je ne peux pas t'aider plus


    Bonne journée

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

Discussions similaires

  1. Placement d'objet "Frame" a l'aide de grid
    Par ju_bicycle dans le forum Tkinter
    Réponses: 1
    Dernier message: 27/10/2009, 10h46
  2. Réponses: 5
    Dernier message: 06/10/2009, 22h01
  3. [Tkinter] Comment insérer une Frame dans une Frame ?
    Par THE_VIP dans le forum Tkinter
    Réponses: 2
    Dernier message: 30/04/2006, 22h15
  4. [Tkinter] Comment effacer le contenu d'une frame?
    Par Dam22 dans le forum Tkinter
    Réponses: 7
    Dernier message: 28/04/2006, 11h36
  5. [Tkinter] image dans un Frame
    Par THE_VIP dans le forum Tkinter
    Réponses: 7
    Dernier message: 26/04/2006, 14h01

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