Search code examples
pythonpyqtpyqt5fullscreen

How to leave fullscreen in PyQt5?


I want to be able to toggle between normal mode and fullscreen by pressing F11. If I enter fullscreen with F11 or using the menubar it works fine. But I want to be able to press F11 again to leave the fullscreen mode. Here is what I tried:

    self.setFullscreen = QtWidgets.QAction("&Fullscreen", self)
    self.setFullscreen.setShortcut("F11")
    self.setFullscreen.setStatusTip("Change to fullscreen mode")


    if self.isFullScreen():
        self.setFullscreen.triggered.connect(lambda _: self.showNormal())

    else:
        self.setFullscreen.triggered.connect(lambda _: self.showFullScreen())

    # menubar

    self.menu = QtWidgets.QMenuBar(self)

    self.file_menu = self.menu.addMenu("&File")
    self.file_menu.addAction(self.openFile)
    self.file_menu.addAction(self.saveFile)
    self.file_menu.addAction(self.exitApp)

    self.view_menu = self.menu.addMenu("&View")
    self.view_menu.addAction(self.setFullscreen)

Solution

  • If the code you provided is in the __init__ of the widget, the if statement is completely useless, since it will be processed only once.

    What you need is to connect to a function that actually toggles the state based on the current window state, when it is actually triggered:

            self.setFullscreen = QtWidgets.QAction("&Fullscreen", self)
            self.setFullscreen.setShortcut("F11")
            self.setFullscreen.setStatusTip("Change to fullscreen mode")
            self.setFullscreen.triggered.connect(self.toggleFullScreen)
            # ...
    
        def toggleFullScreen(self):
            if self.isFullScreen():
                self.showNormal()
            else:
                self.showFullScreen()