2010-06-03 15 views
7

Ich habe ein Python-Programm, das ein neues Fenster öffnet, um einige 'über' Informationen anzuzeigen. Dieses Fenster hat seine eigene Schaltfläche zum Schließen, und ich habe es nicht veränderbar gemacht. Allerdings sind die Schaltflächen zum Maximieren und Minimieren noch vorhanden, und ich möchte, dass sie weg sind.Entfernen Minimieren/Maximieren-Schaltflächen in Tkinter

Ich verwende Tkinter, um alle Informationen in der Tk-Klasse anzuzeigen.

Der Code soweit ist unten angegeben. Ich weiß, dass es nicht schön ist, und ich habe vor, die Informationen so zu erweitern, dass sie zu einer Klasse werden, aber ich möchte dieses Problem lösen, bevor ich weitergehe.

Wer weiß, wie ich regeln kann, welche der Standardtasten vom Windows-Manager angezeigt werden?

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) 

Antwort

22

Im Allgemeinen, welche Dekorationen der WM (window manager) beschließt anzuzeigen, kann nicht einfach durch ein Toolkit wie Tkinter diktiert werden. Also lassen Sie mich zusammenfassen, was ich weiß und was ich gefunden:

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() 

Es besteht auch die Möglichkeit, dass für ein Toplevel Fenster anders als die Wurzel ein, können Sie tun:

toplevel.transient(1) 

und dieser Wille Entfernen Sie die Min/Max-Tasten, aber es hängt auch vom Fenstermanager ab. Von dem, was ich lese, entfernt MS Windows WM sie.

+2

Danke. Ich benutzte den overriveredirect - Ansatz und fügte einen Grat zum unteren Rahmen hinzu. Sieht gut aus. – Vidar

+1

root.resizable (0,0) arbeitete für mich in Ubuntu, benutze tkinter – RahulArackal

+1

@tzot root.overrideredirect (1) würde den äußeren Rahmen insgesamt ausblenden. Es gibt keine Optionen für Close, Min oder Max. Wenn ein Code mit dieser Zeile ausgeführt wurde, bleibt das Fenster für immer auf dem Bildschirm hängen, es sei denn, die IDLE wird zurückgesetzt oder das Betriebssystem wird ausgeschaltet. – Mohammed