Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Masquer les bouton Minimiser Maximiser et Fermer

6 réponses
Avatar
Mickael
Bonjour à tous,
J'ai créé une fenêtre à partir de l'API Tkinter et je souhaiterais masquer
les boutons Minimiser Maximiser et Fermer situés au haut à droite. Le code
que j'utilise pour créer ma fenêtre est le suivant :

root = Tk()
root.title("Test")
bouton = Button(root, text="Quitter", command=root.destroy)
bouton.pack()
root.mainloop()

Si vous avez une idée sur la façon de procéder, je suis preneur !
Merci d'avance.

--
Mickael

6 réponses

Avatar
Pierre Quentel
Bonjour,

Tu ne peux pas enlever seulement ces boutons, mais tu peux enlever
toute la barre du haut en ajoutant

root.overrideredirect(1)

avant le mainloop(). Ensuite tu peux te refaire une barre de titre
perso avec un Canvas

Cordialement,
Pierre
Avatar
Mickael
Merci pour ta réponse Pierre.
Je viens d'essayer cette instruction mais c'est assez violent ! La barre de
titre disparait mais la bordure de la fenêtre également. De plus, je ne suis
plus en mesure de déplacer ma fenêtre.
Je débute en python et la classe Canvas m'est peu familière. Permet-elle de
redonner ces fonctionnalités à mon application ?

Mickael.

"Pierre Quentel" a écrit dans le message de
news:
Bonjour,

Tu ne peux pas enlever seulement ces boutons, mais tu peux enlever
toute la barre du haut en ajoutant

root.overrideredirect(1)

avant le mainloop(). Ensuite tu peux te refaire une barre de titre
perso avec un Canvas

Cordialement,
Pierre



Avatar
Pierre Quentel
Tu peux essayer ce bout de code :

from Tkinter import *

class CustomWindow:

def __init__(self,title=''):
self.root = root = Tk()
c = Canvas(root,bg="red",height ,width 0)
c.create_text(20,10,text=title)
c.bind("<Button-1>",self.set_mouse)
c.bind("<B1-Motion>",self.move)
c.pack()
bouton = Button(root, text="Quitter", command=root.destroy)
bouton.pack()
root.overrideredirect(1)

def move(self,event):
x,y=self.x+event.x_root-self.mx,self.y+event.y_root-self.my
self.root.geometry("%dx%d%+d%+d" % (self.root.winfo_reqwidth(),
self.root.winfo_reqheight(),x,y))

def set_mouse(self,event):
self.x=self.root.winfo_rootx()
self.y=self.root.winfo_rooty()
self.mx=event.x_root
self.my=event.y_root

c = CustomWindow('essai')
c.root.mainloop()

et l'adapter en fonction de tes besoins. Pour comprendre les méthodes
utilisées (le glisser-déposer notamment), tu peux te référer à
l'excellent "An introduction to Tkinter" disponible en ligne ou en
téléchargement PDF

Cordialement,
Pierre
Avatar
Eric Brunel
On Fri, 22 Sep 2006 14:14:56 +0200, Mickael wrote:

(merci de répondre en dessous du message d'origine, sinon c'est difficile
à lire - corrigé)

"Pierre Quentel" a écrit dans le message de
news:
Bonjour,

Tu ne peux pas enlever seulement ces boutons, mais tu peux enlever
toute la barre du haut en ajoutant

root.overrideredirect(1)

avant le mainloop(). Ensuite tu peux te refaire une barre de titre
perso avec un Canvas


Merci pour ta réponse Pierre.
Je viens d'essayer cette instruction mais c'est assez violent ! La barre
de
titre disparait mais la bordure de la fenêtre également. De plus, je ne
suis
plus en mesure de déplacer ma fenêtre.


C'est à ça que sert overrideredirect: la fenêtre n'est plus gérée par le
window manager (où ce qui en tient lieu).

Je débute en python et la classe Canvas m'est peu familière. Permet-elle
de
redonner ces fonctionnalités à mon application ?


Non. C'est un conteneur "de base", sans fonctionnalité particulière.

Quant à ta question d'origine, il serait utile de savoir ce que tu veux
faire exactement. Il est assez inhabituel de vouloir une fenêtre sans
bouton, mais qu'on peut quand même déplacer.

Il existe toutefois un moyen de désactiver le bouton de maximisation en
faisant:
wdw.wm_resizable(0, 0)
Mais (sous Windows) ça le désactive seulement; ça ne l'enlève pas. Et les
boutons de minimisation et de fermeture sont toujours présents et actifs.
Pour rendre le bouton de fermeture inopérant, on peut aussi faire un:
wdw.protocol('WM_DELETE_WINDOW', lambda: None)
mais ça le laisse affiché et apparemment actif (même si cliquer dessus ne
fait plus rien).

Mais la question de fond reste: pourquoi veux-tu faire ça?

HTH quand même...
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"


Avatar
Mickael
En fait, je dois absolument maitriser la fermeture de cette boite de
dialogue. J'ai créé un bouton "VALIDER" qui me permet de vérifier et
d'enregistrer des données dans un fichier. La présence du bouton "Fermer"
permet à l'utilisateur de quitter la boite de dialogue en contournant
l'étape de création du fichier, et cela je souhaite l'éviter.
En ce qui concerne les boutons "minimiser" et "maximiser", ils ne me servent
pas donc je voulais les faire sauter par la même occasion. En voyant une
tkMessageBox, j'ai cru que c'était faisable facilement...

En tout cas, les solutions que vous me proposez me conviennent parfaitement.
Soit je rend le bouton de fermeture inopérant.
Soit je passe par un canvas en m'inspirant du code fourni par Pierre.

Merci à tous les deux.

Mickael.

"Eric Brunel" a écrit dans le message de news:

On Fri, 22 Sep 2006 14:14:56 +0200, Mickael wrote:

(merci de répondre en dessous du message d'origine, sinon c'est difficile
à lire - corrigé)

"Pierre Quentel" a écrit dans le message de
news:
Bonjour,

Tu ne peux pas enlever seulement ces boutons, mais tu peux enlever
toute la barre du haut en ajoutant

root.overrideredirect(1)

avant le mainloop(). Ensuite tu peux te refaire une barre de titre
perso avec un Canvas


Merci pour ta réponse Pierre.
Je viens d'essayer cette instruction mais c'est assez violent ! La barre
de
titre disparait mais la bordure de la fenêtre également. De plus, je ne
suis
plus en mesure de déplacer ma fenêtre.


C'est à ça que sert overrideredirect: la fenêtre n'est plus gérée par le
window manager (où ce qui en tient lieu).

Je débute en python et la classe Canvas m'est peu familière. Permet-elle
de
redonner ces fonctionnalités à mon application ?


Non. C'est un conteneur "de base", sans fonctionnalité particulière.

Quant à ta question d'origine, il serait utile de savoir ce que tu veux
faire exactement. Il est assez inhabituel de vouloir une fenêtre sans
bouton, mais qu'on peut quand même déplacer.

Il existe toutefois un moyen de désactiver le bouton de maximisation en
faisant:
wdw.wm_resizable(0, 0)
Mais (sous Windows) ça le désactive seulement; ça ne l'enlève pas. Et les
boutons de minimisation et de fermeture sont toujours présents et actifs.
Pour rendre le bouton de fermeture inopérant, on peut aussi faire un:
wdw.protocol('WM_DELETE_WINDOW', lambda: None)
mais ça le laisse affiché et apparemment actif (même si cliquer dessus ne
fait plus rien).

Mais la question de fond reste: pourquoi veux-tu faire ça?

HTH quand même...
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"




Avatar
Méta-MCI
Bonjour !


Si tu es sous windows, et si tu ne trouves pas d'autre solution, j'ai un
petit exécutable, qui désactive le bouton "close", et le menu_système
"close".

Mais ceci n'empêche pas les utilisateurs de faire Alt-F4 (il faut
intercepter ça dans le programme).

C'est une solution un peu "bricolage", car il faut appeler l'exécutable
externe ; mais, en cas d'urgence...


@-salutations

Michel Claveau