OVH Cloud OVH Cloud

Début avec Tkinter

2 réponses
Avatar
JBB
Plusieurs petites questions, triviales pur ceux qui connaissent.
J'ai une fenetre avec 2 boutons et un texte cf ci dessus

class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
frameBoutons = Frame(frame)
frameBoutons.pack(side=TOP)
self.button = Button(frameBoutons, text="QUIT", fg="red",
command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frameBoutons, text="Hello")
self.hi_there.pack(side=RIGHT)
self.texte = ScrolledText(frame)
self.texte.pack(side=BOTTOM)

root = Tk()
app = App(root)
root.mainloop()

1)

Pour 'packer' mes 2 botons au dessus du texte j'ai du créer une nouvel
le Frame. Est que c'est comme ça qu'il faut proceder?

2)
Comment fair pour que mon Text se redimensionne à la taille de la
fenêtre. Ca marche quand je retrecie la fenêtre mais pas quand je
l'agrandit?

3) comment j'efface le contenu du texte ?
self.texte.delete( ???,END)

2 réponses

Avatar
JBB
Plusieurs petites questions, triviales pur ceux qui connaissent.
J'ai une fenetre avec 2 boutons et un texte cf ci dessus

class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
frameBoutons = Frame(frame)
frameBoutons.pack(side=TOP)
self.button = Button(frameBoutons, text="QUIT", fg="red",
command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frameBoutons, text="Hello")
self.hi_there.pack(side=RIGHT)
self.texte = ScrolledText(frame)
self.texte.pack(side=BOTTOM)

root = Tk()
app = App(root)
root.mainloop()

1)

Pour 'packer' mes 2 botons au dessus du texte j'ai du créer une nouvel
le Frame. Est que c'est comme ça qu'il faut proceder?

2)
Comment fair pour que mon Text se redimensionne à la taille de la
fenêtre. Ca marche quand je retrecie la fenêtre mais pas quand je
l'agrandit?

3) comment j'efface le contenu du texte ?
self.texte.delete( ???,END)
self.texte.delete( "0.0",END)

a l'air de marcher . mais c'est pas super propre non?

Avatar
Eric Brunel
On Fri, 19 Aug 2005 12:58:30 +0200, JBB wrote:

Plusieurs petites questions, triviales pur ceux qui connaissent.
J'ai une fenetre avec 2 boutons et un texte cf ci dessus

class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
frameBoutons = Frame(frame)
frameBoutons.pack(side=TOP)
self.button = Button(frameBoutons, text="QUIT", fg="red",
command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frameBoutons, text="Hello")
self.hi_there.pack(side=RIGHT)
self.texte = ScrolledText(frame)
self.texte.pack(side=BOTTOM)

root = Tk()
app = App(root)
root.mainloop()

1)

Pour 'packer' mes 2 botons au dessus du texte j'ai du créer une nouvel
le Frame. Est que c'est comme ça qu'il faut proceder?



Réponse simple: oui.
Réponse plus compliquée: tu peux aussi utiliser autre chose que pack pour placer tes widgets. La méthode la plus puissante et sans doute la plus fréquemment employée est grid, mais elle est un peu plus complexe à utiliser que pack. Elle évite par contre de temps en temps des Frame supplémentaires.

Par contre, tu as un niveau de Frame qui ne sert à rien: vu que master (l'instance de Tk) est déjà un conteneur, le Frame "frame" est inutile. Tu peux donc écrire:

class App:
def __init__(self, master):
frameBoutons = Frame(master)
frameBoutons.pack(side=TOP)
self.button = Button(frameBoutons, text="QUIT", fg="red", command=master.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frameBoutons, text="Hello")
self.hi_there.pack(side=RIGHT)
self.texte = ScrolledText(master)
self.texte.pack(side=BOTTOM)

2)
Comment fair pour que mon Text se redimensionne à la taille de la
fenêtre. Ca marche quand je retrecie la fenêtre mais pas quand je
l'agrandit?



C'est une option du pack:
self.texte.pack(side=BOTTOM, fill=BOTH, expand=1)

3) comment j'efface le contenu du texte ?
self.texte.delete( ???,END)
self.texte.delete( "0.0",END)

a l'air de marcher . mais c'est pas super propre non?


Pourquoi? Les positions pour les caractères dans un widget Text sont de la forme 'ligne.colonne' sous tk. Donc pas vraiment de problème avec "0.0", bien que les numéros de lignes commencent à 1, donc ça serait plutot "1.0". On peut aussi écrire simplement 1.0 (sans les quotes) vu que de toutes façons, tout sera converti en chaine au niveau de tcl vu qu'il ne connait que ça.


Une autre petite remarque: dans ton script, mettre les boutons dans des attributs de l'objet n'a pas l'air de servir à grand chose, vu que tu ne t'en sers pas ailleurs. Tu aurais donc pu écrire:

class App:
def __init__(self, master):
frameBoutons = Frame(master)
frameBoutons.pack(side=TOP)
button = Button(frameBoutons, text="QUIT", fg="red", command=master.quit)
button.pack(side=LEFT)
hi_there = Button(frameBoutons, text="Hello")
hi_there.pack(side=RIGHT)
self.texte = ScrolledText(master)
self.texte.pack(side=BOTTOM)

(Je suppose que tu vas te servir de self.texte vue ta question sur l'effacement du texte)

On peut meme faire plus court:

class App:
def __init__(self, master):
frameBoutons = Frame(master)
frameBoutons.pack(side=TOP)
Button(frameBoutons, text="QUIT", fg="red", command=master.quit).pack(side=LEFT)
Button(frameBoutons, text="Hello").pack(side=RIGHT)
self.texte = ScrolledText(master)
self.texte.pack(side=BOTTOM)

HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17;8(%,5.Z65'*9--56l7+-'])"