2010-06-03 27 views
7

Tengo un programa de Python que abre una nueva ventana para mostrar algo de información "sobre". Esta ventana tiene su propio botón de cerrar, y lo he hecho no modificable. Sin embargo, los botones para maximizar y minimizar siguen ahí, y quiero que se vayan.Eliminación de minimizar/maximizar botones en Tkinter

Estoy usando Tkinter, envolviendo toda la información para mostrar en la clase Tk.

El código hasta el momento se proporciona a continuación. Sé que no es bonito, y planeo expandir la información convirtiéndola en una clase, pero quiero que este problema sea resuelto antes de seguir adelante.

¿Alguien sabe cómo puedo controlar cuál de los botones predeterminados se muestran con el administrador de Windows?

def showAbout(self): 


    if self.aboutOpen==0: 
     self.about=Tk() 
     self.about.title("About "+ self.programName) 

     Label(self.about,text="%s: Version 1.0" % self.programName ,foreground='blue').pack() 
     Label(self.about,text="By Vidar").pack() 
     self.contact=Label(self.about,text="Contact: [email protected]",font=("Helvetica", 10)) 
     self.contact.pack() 
     self.closeButton=Button(self.about, text="Close", command = lambda: self.showAbout()) 
     self.closeButton.pack() 
     self.about.geometry("%dx%d+%d+%d" % (175,\ 
             95,\ 
             self.myParent.winfo_rootx()+self.myParent.winfo_width()/2-75,\ 
             self.myParent.winfo_rooty()+self.myParent.winfo_height()/2-35)) 

     self.about.resizable(0,0) 
     self.aboutOpen=1 
     self.about.protocol("WM_DELETE_WINDOW", lambda: self.showAbout()) 
     self.closeButton.focus_force() 


     self.contact.bind('<Leave>', self.contactMouseOver) 
     self.contact.bind('<Enter>', self.contactMouseOver) 
     self.contact.bind('<Button-1>', self.mailAuthor) 
    else: 
     self.about.destroy() 
     self.aboutOpen=0 

def contactMouseOver(self,event): 

    if event.type==str(7): 
     self.contact.config(font=("Helvetica", 10, 'underline')) 
    elif event.type==str(8): 
     self.contact.config(font=("Helvetica", 10)) 

def mailAuthor(self,event): 
    import webbrowser 
    webbrowser.open('mailto:[email protected]',new=1) 

Respuesta

22

En general, las decoraciones que el WM (administrador de ventanas) decide mostrar no pueden ser dictadas fácilmente por un conjunto de herramientas como Tkinter. Así que permítanme resumir lo que sé más lo que he encontrado:

import Tkinter as tk 

root= tk.Tk() 

root.title("wm min/max") 

# this removes the maximize button 
root.resizable(0,0) 

# # if on MS Windows, this might do the trick, 
# # but I wouldn't know: 
# root.attributes(toolwindow=1) 

# # for no window manager decorations at all: 
# root.overrideredirect(1) 
# # useful for something like a splash screen 

root.mainloop() 

También existe la posibilidad de que, por una ventana Toplevel distinta de la raíz, que puede hacer:

toplevel.transient(1) 

y esta voluntad elimine los botones min/max, pero también depende del administrador de ventanas. Por lo que leí, MS Windows WM los elimina.

+2

Gracias. Terminé usando el enfoque overrideredirect - y agregué una cresta al marco inferior. Se ve lo suficientemente decente. – Vidar

+1

root.resizable (0,0) funcionó para mí en Ubuntu, estoy usando tkinter – RahulArackal

+1

@tzot root.overrideredirect (1) ocultaría el marco externo por completo. No habrá opciones para close, min o max. Si se ejecutó un código que contiene esta línea, la ventana quedará pegada a la pantalla para siempre, a menos que el IDLE se vuelva a marcar o el sistema operativo se apague. – Mohammed

Cuestiones relacionadas