Removing minimize/maximize buttons in Tkinter

54,988

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

# # 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.

Solution 2

from tkinter import  *

qw=Tk()
qw.resizable(0,0)      #will disable max/min tab of window
qw.mainloop()

enter image description here

from tkinter import  *

qw=Tk()
qw.overrideredirect(1) # will remove the top badge of window
qw.mainloop()

enter image description here

here are the two ways to disable maximize and minimize option in tkinter

remember the code for button shown in image is not in example as this is solution regarding how to make max/min tab nonfunctional or how to remove

Solution 3

Windows

For windows, you can use -toolwindow attribute like that:

root.attributes('-toolwindow', True)

So if you want complete code, it's that

from tkinter import *

from tkinter import ttk

root = Tk()

root.attributes('-toolwindow', True)

root.mainloop()

Other window.attributes attributes:

-alpha
-transparentcolor
-disabled
-fullscreen
-toolwindow
-topmost

Important note this is only working with Windows. Not MacOS

Mac

With mac you can use overredirect attribute and a "x" button to close the window and this will do the job. :D like that:

from tkinter import *

from tkinter import ttk

window = Tk()

window.overredirect(True)

Button(window, text="x", command=window.destroy).pack()

window.mainloop()

Inspired by https://www.delftstack.com/howto/python-tkinter/how-to-create-full-screen-window-in-tkinter/

For me, it's working, i have a windows 7.

Comment me if i have a error.

Share:
54,988

Related videos on Youtube

Vidar
Author by

Vidar

Updated on July 09, 2022

Comments

  • Vidar
    Vidar almost 2 years

    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?

    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)
    
  • Vidar
    Vidar almost 14 years
    Thanks. I ended up using the overrideredirect - approach and added a ridge to the the bottom frame. Looks decent enough.
  • RahulArackal
    RahulArackal about 10 years
    root.resizable(0,0) worked for me in Ubuntu, 'm using tkinter
  • Mohammed
    Mohammed over 9 years
    @tzot root.overrideredirect(1) would hide the outer frame altogether. There will be no options for close, min or max. If a code containing this line was executed, then the window will stuck to the screen forever unless the IDLE is restarded or the OS is switched off.
  • Mohammed
    Mohammed over 9 years
    root.attributes(toolwindow=1) This command does not work in Windows. The correct command is root.attributes("-toolwindow",1). Thanks!
  • CommonSense
    CommonSense over 6 years
    For anyone, who seeks more flexible windows solution, this might be useful!
  • greendino
    greendino almost 4 years
    that only maximizes, minimize is on the left-most side
  • martineau
    martineau about 3 years
    Currently on Windows with Python 3, qw.resizable(0,0) on disables the maximize button but the minimize one still works.
  • Admin
    Admin over 2 years
    As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.