I have a python program which opens a new windows to display some 'about' information. This window has its own close button, and I have made it non-resizeable. However, the buttons to maximize and minimize it are still there, and I want them gone.
I am using Tkinter, wrapping all the info to display in the Tk class.
The code so far is given below. I know its not pretty, and I plan on expanding the info making it into a class, but I want to get this problem sorted before moving along.
Anyone know how I can govern which of the default buttons are shown by the windows manager?
import webbrowser
class MyWindow(Tk):
def show_about(self):
if self.about_open == False:
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: adress@gmail.com",font=("Helvetica", 10))
self.contact.pack()
self.closeButton=Button(self.about, text="Close", command = lambda: self.show_about())
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.about_open=True
self.about.protocol("WM_DELETE_WINDOW", lambda: self.show_about())
self.closeButton.focus_force()
self.contact.bind('<Leave>', self.contact_mouse_over)
self.contact.bind('<Enter>', self.contact_mouse_over)
self.contact.bind('<Button-1>', self.mail_author)
else:
self.about.destroy()
self.about_open=False
def contact_mouse_over(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 mail_author(self, event):
webbrowser.open('mailto:adress@gmail.com', new=1)
In general, what decorations the WM (window manager) decides to display can not be easily dictated by a toolkit like Tkinter. So let me summarize what I know plus what I found:
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)
# or
# root.attributes("-toolwindow", 1)
# # for no window manager decorations at all:
# root.overrideredirect(1)
# # useful for something like a splash screen
root.mainloop()
There is also the possibility that, for a Toplevel
window other than the root one, you can do:
toplevel.transient(1)
and this will remove the min/max buttons, but it also depends on the window manager. From what I read, the MS Windows WM does remove them.