Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. How to hide or disable butons (minimize, maximize, close) MainWindow
Qt 6.11 is out! See what's new in the release blog

How to hide or disable butons (minimize, maximize, close) MainWindow

Scheduled Pinned Locked Moved Unsolved Qt for Python
12 Posts 3 Posters 170 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    California
    wrote last edited by California
    #1

    Hello, I would like to avoid pressing the minimize, maximize, and exit buttons. Is it possible to hide these buttons so that they are invisible or disable them from responding to touch? A simple test code is attached for demonstration. The application runs on Raspberry Pi-4, Debian Trixie.MainWindow.png

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'test.ui'
    #
    # Created by: PyQt5 UI code generator 5.15.9
    #
    # WARNING: Any manual changes made to this file will be lost when pyuic5 is
    # run again.  Do not edit this file unless you know what you are doing.
    
    # msgBox.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint)
    # setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
    
    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(800, 233)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    
    
    

    With best regards, Vlado

    JonBJ 1 Reply Last reply
    0
    • C California

      Hello, I would like to avoid pressing the minimize, maximize, and exit buttons. Is it possible to hide these buttons so that they are invisible or disable them from responding to touch? A simple test code is attached for demonstration. The application runs on Raspberry Pi-4, Debian Trixie.MainWindow.png

      # -*- coding: utf-8 -*-
      
      # Form implementation generated from reading ui file 'test.ui'
      #
      # Created by: PyQt5 UI code generator 5.15.9
      #
      # WARNING: Any manual changes made to this file will be lost when pyuic5 is
      # run again.  Do not edit this file unless you know what you are doing.
      
      # msgBox.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint)
      # setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
      
      from PyQt5 import QtCore, QtGui, QtWidgets
      
      
      class Ui_MainWindow(object):
          def setupUi(self, MainWindow):
              MainWindow.setObjectName("MainWindow")
              MainWindow.resize(800, 233)
              self.centralwidget = QtWidgets.QWidget(MainWindow)
              self.centralwidget.setObjectName("centralwidget")
              MainWindow.setCentralWidget(self.centralwidget)
              self.statusbar = QtWidgets.QStatusBar(MainWindow)
              self.statusbar.setObjectName("statusbar")
              MainWindow.setStatusBar(self.statusbar)
      
              self.retranslateUi(MainWindow)
              QtCore.QMetaObject.connectSlotsByName(MainWindow)
      
          def retranslateUi(self, MainWindow):
              _translate = QtCore.QCoreApplication.translate
              MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
      
      
      if __name__ == "__main__":
          import sys
          app = QtWidgets.QApplication(sys.argv)
          MainWindow = QtWidgets.QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(MainWindow)
          MainWindow.show()
          sys.exit(app.exec_())
      
      
      

      With best regards, Vlado

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote last edited by
      #2

      @California said in How to hide or disable butons (minimize, maximize, close) MainWindow:

      setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)

      Like this on the main window. Some suitable combination of the flags shown in class WindowType, scroll down to "The CustomizeWindowHint flag" table.

      C 1 Reply Last reply
      0
      • JonBJ JonB

        @California said in How to hide or disable butons (minimize, maximize, close) MainWindow:

        setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)

        Like this on the main window. Some suitable combination of the flags shown in class WindowType, scroll down to "The CustomizeWindowHint flag" table.

        C Offline
        C Offline
        California
        wrote last edited by California
        #3

        @JonB said in How to hide or disable butons (minimize, maximize, close) MainWindow:

        setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)

        I found it, but I just don't know how to use it. I got an error:

        NameError: name 'setWindowFlag' is not defined
        

        Would you be so kind to describe how to use this function properly in code posted above!

        JonBJ 1 Reply Last reply
        0
        • C California

          @JonB said in How to hide or disable butons (minimize, maximize, close) MainWindow:

          setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)

          I found it, but I just don't know how to use it. I got an error:

          NameError: name 'setWindowFlag' is not defined
          

          Would you be so kind to describe how to use this function properly in code posted above!

          JonBJ Offline
          JonBJ Offline
          JonB
          wrote last edited by
          #4

          @California
          You have a bunch of MainWindow.set...() method calls. So did you similarly do MainWindow.setWindowFlag(...), e.g. MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False) and for the other flags you want to clear?

          C 1 Reply Last reply
          0
          • JonBJ JonB

            @California
            You have a bunch of MainWindow.set...() method calls. So did you similarly do MainWindow.setWindowFlag(...), e.g. MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False) and for the other flags you want to clear?

            C Offline
            C Offline
            California
            wrote last edited by
            #5

            @JonB I put

            MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
            

            in to diferent places in code, this time no error appeared, however Close Button is stil visable and click to it makes MainWindow dissapeared...

            # -*- coding: utf-8 -*-
            
            # Form implementation generated from reading ui file 'test.ui'
            #
            # Created by: PyQt5 UI code generator 5.15.9
            #
            # WARNING: Any manual changes made to this file will be lost when pyuic5 is
            # run again.  Do not edit this file unless you know what you are doing.
            
            from PyQt5 import QtCore, QtGui, QtWidgets
            
            
            class Ui_MainWindow(object):
                def setupUi(self, MainWindow):
                    MainWindow.setObjectName("MainWindow")
                    MainWindow.resize(800, 233)
                    MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                    self.centralwidget = QtWidgets.QWidget(MainWindow)
                    self.centralwidget.setObjectName("centralwidget")
                    MainWindow.setCentralWidget(self.centralwidget)
                    self.statusbar = QtWidgets.QStatusBar(MainWindow)
                    self.statusbar.setObjectName("statusbar")
                    MainWindow.setStatusBar(self.statusbar)
                    #MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                    
            
                    self.retranslateUi(MainWindow)
                    QtCore.QMetaObject.connectSlotsByName(MainWindow)
            
                def retranslateUi(self, MainWindow):
                    _translate = QtCore.QCoreApplication.translate
                    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            
            
            if __name__ == "__main__":
                import sys
                app = QtWidgets.QApplication(sys.argv)
                MainWindow = QtWidgets.QMainWindow()
                #MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                ui = Ui_MainWindow()
                ui.setupUi(MainWindow)
                MainWindow.show()
                sys.exit(app.exec_())
            
            
            
            JonBJ 1 Reply Last reply
            0
            • C California

              @JonB I put

              MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
              

              in to diferent places in code, this time no error appeared, however Close Button is stil visable and click to it makes MainWindow dissapeared...

              # -*- coding: utf-8 -*-
              
              # Form implementation generated from reading ui file 'test.ui'
              #
              # Created by: PyQt5 UI code generator 5.15.9
              #
              # WARNING: Any manual changes made to this file will be lost when pyuic5 is
              # run again.  Do not edit this file unless you know what you are doing.
              
              from PyQt5 import QtCore, QtGui, QtWidgets
              
              
              class Ui_MainWindow(object):
                  def setupUi(self, MainWindow):
                      MainWindow.setObjectName("MainWindow")
                      MainWindow.resize(800, 233)
                      MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                      self.centralwidget = QtWidgets.QWidget(MainWindow)
                      self.centralwidget.setObjectName("centralwidget")
                      MainWindow.setCentralWidget(self.centralwidget)
                      self.statusbar = QtWidgets.QStatusBar(MainWindow)
                      self.statusbar.setObjectName("statusbar")
                      MainWindow.setStatusBar(self.statusbar)
                      #MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                      
              
                      self.retranslateUi(MainWindow)
                      QtCore.QMetaObject.connectSlotsByName(MainWindow)
              
                  def retranslateUi(self, MainWindow):
                      _translate = QtCore.QCoreApplication.translate
                      MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
              
              
              if __name__ == "__main__":
                  import sys
                  app = QtWidgets.QApplication(sys.argv)
                  MainWindow = QtWidgets.QMainWindow()
                  #MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                  ui = Ui_MainWindow()
                  ui.setupUi(MainWindow)
                  MainWindow.show()
                  sys.exit(app.exec_())
              
              
              
              JonBJ Offline
              JonBJ Offline
              JonB
              wrote last edited by
              #6

              @California
              I gave you the link to the PySide page describing the window flags. Did you read it? Please do so when asking questions/seeking to understand. Did you act on it stating:

              The CustomizeWindowHint flag is used to enable customization of the window controls. This flag must be set to allow the WindowTitleHint, WindowSystemMenuHint, WindowMinimizeButtonHint, WindowMaximizeButtonHint and WindowCloseButtonHint flags to be changed.

              C 1 Reply Last reply
              1
              • JonBJ JonB

                @California
                I gave you the link to the PySide page describing the window flags. Did you read it? Please do so when asking questions/seeking to understand. Did you act on it stating:

                The CustomizeWindowHint flag is used to enable customization of the window controls. This flag must be set to allow the WindowTitleHint, WindowSystemMenuHint, WindowMinimizeButtonHint, WindowMaximizeButtonHint and WindowCloseButtonHint flags to be changed.

                C Offline
                C Offline
                California
                wrote last edited by
                #7

                @JonB I did read provided site and I changed command as suggested. As said:

                Qt.WindowCloseButtonHint … Adds a close button. On some platforms this implies Qt::WindowSystemMenuHint for it to work.
                

                in my case:

                MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)
                

                but stil the same result. No error, Close button in function. I am not sure what I am missing here...

                JonBJ 1 Reply Last reply
                0
                • C California

                  @JonB I did read provided site and I changed command as suggested. As said:

                  Qt.WindowCloseButtonHint … Adds a close button. On some platforms this implies Qt::WindowSystemMenuHint for it to work.
                  

                  in my case:

                  MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)
                  

                  but stil the same result. No error, Close button in function. I am not sure what I am missing here...

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote last edited by JonB
                  #8

                  @California
                  That's is not really or necessarily what it says. I would try:

                  MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                  MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                  MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                  MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                  
                  MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                  

                  Start with: do any of these influence the window? If not, are you running Xorg/other or Wayland?

                  C 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @California
                    That's is not really or necessarily what it says. I would try:

                    MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                    MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                    MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                    MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                    
                    MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                    

                    Start with: do any of these influence the window? If not, are you running Xorg/other or Wayland?

                    C Offline
                    C Offline
                    California
                    wrote last edited by
                    #9

                    @JonB I am on Wayland. Tried diferent options as you can see in code below, none of them worked.

                    # -*- coding: utf-8 -*-
                    
                    # Form implementation generated from reading ui file 'test.ui'
                    #
                    # Created by: PyQt5 UI code generator 5.15.9
                    # WindowSystemMenuHint
                    # WARNING: Any manual changes made to this file will be lost when pyuic5 is
                    # run again.  Do not edit this file unless you know what you are doing.
                    
                    from PyQt5 import QtCore, QtGui, QtWidgets
                    
                    # setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint);
                    class Ui_MainWindow(object):
                        def setupUi(self, MainWindow):
                            MainWindow.setObjectName("MainWindow")
                            MainWindow.resize(800, 233)
                            """    
                            MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                            MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                            MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                            MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                            #MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                            MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, True)  # Don't know about this one
                            """
                            self.centralwidget = QtWidgets.QWidget(MainWindow)
                            self.centralwidget.setObjectName("centralwidget")
                            MainWindow.setCentralWidget(self.centralwidget)
                            self.statusbar = QtWidgets.QStatusBar(MainWindow)
                            self.statusbar.setObjectName("statusbar")
                            MainWindow.setStatusBar(self.statusbar)
                            """
                            MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                            MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                            MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                            MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                            #MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                            MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, True)  # Don't know about this one
                            """
                    
                            self.retranslateUi(MainWindow)
                            QtCore.QMetaObject.connectSlotsByName(MainWindow)
                    
                        def retranslateUi(self, MainWindow):
                            _translate = QtCore.QCoreApplication.translate
                            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
                    
                    
                    if __name__ == "__main__":
                        import sys
                        app = QtWidgets.QApplication(sys.argv)
                        MainWindow = QtWidgets.QMainWindow()
                        #"""
                        MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                        MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                        MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                        MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                        #MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                        MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, True)  # Don't know about this one
                        #"""
                        ui = Ui_MainWindow()
                        ui.setupUi(MainWindow)
                        MainWindow.show()
                        sys.exit(app.exec_())
                    
                    
                    

                    Thanks for helping, after one hour I will not have an acces to PC for few days. In Sunday back again.
                    With best regards, Vlado

                    JonBJ 1 Reply Last reply
                    0
                    • C California

                      @JonB I am on Wayland. Tried diferent options as you can see in code below, none of them worked.

                      # -*- coding: utf-8 -*-
                      
                      # Form implementation generated from reading ui file 'test.ui'
                      #
                      # Created by: PyQt5 UI code generator 5.15.9
                      # WindowSystemMenuHint
                      # WARNING: Any manual changes made to this file will be lost when pyuic5 is
                      # run again.  Do not edit this file unless you know what you are doing.
                      
                      from PyQt5 import QtCore, QtGui, QtWidgets
                      
                      # setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint);
                      class Ui_MainWindow(object):
                          def setupUi(self, MainWindow):
                              MainWindow.setObjectName("MainWindow")
                              MainWindow.resize(800, 233)
                              """    
                              MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                              MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                              MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                              MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                              #MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                              MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, True)  # Don't know about this one
                              """
                              self.centralwidget = QtWidgets.QWidget(MainWindow)
                              self.centralwidget.setObjectName("centralwidget")
                              MainWindow.setCentralWidget(self.centralwidget)
                              self.statusbar = QtWidgets.QStatusBar(MainWindow)
                              self.statusbar.setObjectName("statusbar")
                              MainWindow.setStatusBar(self.statusbar)
                              """
                              MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                              MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                              MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                              MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                              #MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                              MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, True)  # Don't know about this one
                              """
                      
                              self.retranslateUi(MainWindow)
                              QtCore.QMetaObject.connectSlotsByName(MainWindow)
                      
                          def retranslateUi(self, MainWindow):
                              _translate = QtCore.QCoreApplication.translate
                              MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
                      
                      
                      if __name__ == "__main__":
                          import sys
                          app = QtWidgets.QApplication(sys.argv)
                          MainWindow = QtWidgets.QMainWindow()
                          #"""
                          MainWindow.setWindowFlag(QtCore.Qt.CustomizeWindowHint, True)  # This one is important
                          MainWindow.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint, False)
                          MainWindow.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
                          MainWindow.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False)
                          #MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, False)  # Don't know about this one
                          MainWindow.setWindowFlag(QtCore.Qt.WindowSystemMenuHint, True)  # Don't know about this one
                          #"""
                          ui = Ui_MainWindow()
                          ui.setupUi(MainWindow)
                          MainWindow.show()
                          sys.exit(app.exec_())
                      
                      
                      

                      Thanks for helping, after one hour I will not have an acces to PC for few days. In Sunday back again.
                      With best regards, Vlado

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote last edited by
                      #10

                      @California said in How to hide or disable butons (minimize, maximize, close) MainWindow:

                      I am on Wayland.

                      Then you will not be able to alter the window furniture, position and other things. And you are not intended to.

                      C 1 Reply Last reply
                      1
                      • JonBJ JonB

                        @California said in How to hide or disable butons (minimize, maximize, close) MainWindow:

                        I am on Wayland.

                        Then you will not be able to alter the window furniture, position and other things. And you are not intended to.

                        C Offline
                        C Offline
                        California
                        wrote last edited by
                        #11

                        @JonB Well, tested on X11 as well, same result ...

                        1 Reply Last reply
                        0
                        • Christian EhrlicherC Offline
                          Christian EhrlicherC Offline
                          Christian Ehrlicher
                          Lifetime Qt Champion
                          wrote last edited by
                          #12

                          If those flags are honored or not depends on the window manager: " Some of these flags depend on whether the underlying window manager supports them."

                          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                          Visit the Qt Academy at https://academy.qt.io/catalog

                          1 Reply Last reply
                          1

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved