Cómo crear una ventana de pantalla completa en Tkinter

Jinku Hu 30 enero 2023
  1. Windows root.attributes('-fullscreen', True) para crear el modo de pantalla completa en Tkinter
  2. Ubuntu root.attributes('-zoomed', True) para crear el modo de pantalla completa en Tkinter
  3. Modo de pantalla completa con la barra de herramientas mostrada
Cómo crear una ventana de pantalla completa en Tkinter

En este tutorial, introduciremos cómo crear una ventana de pantalla completa en Tkinter, y cómo alternar o salir del modo de pantalla completa.

Windows root.attributes('-fullscreen', True) para crear el modo de pantalla completa en Tkinter

Los atributos tk.tk establecen los atributos específicos de la plataforma. Los atributos en Windows son,

  • -alfa
  • -transparentcolor
  • -disabled
  • -fullscreen
  • -toolwindow
  • -topmost

El modo -fullscreen especifica si la ventana está en modo pantalla completa o no.

import tkinter as tk


class Fullscreen_Example:
    def __init__(self):
        self.window = tk.Tk()
        self.window.attributes("-fullscreen", True)
        self.fullScreenState = False
        self.window.bind("<F11>", self.toggleFullScreen)
        self.window.bind("<Escape>", self.quitFullScreen)

        self.window.mainloop()

    def toggleFullScreen(self, event):
        self.fullScreenState = not self.fullScreenState
        self.window.attributes("-fullscreen", self.fullScreenState)

    def quitFullScreen(self, event):
        self.fullScreenState = False
        self.window.attributes("-fullscreen", self.fullScreenState)


if __name__ == "__main__":
    app = Fullscreen_Example()
self.window.bind("<F11>", self.toggleFullScreen)

La F11 está ligada a la función toggleFullScreen.

def toggleFullScreen(self, event):
    self.fullScreenState = not self.fullScreenState
    self.window.attributes("-fullscreen", self.fullScreenState)

El modo fullscreen se actualiza al estado de conmutación en esta función.

def quitFullScreen(self, event):
    self.fullScreenState = False
    self.window.attributes("-fullscreen", self.fullScreenState)

La función quitFullScreen (salir de la pantalla completa) abandona el modo de pantalla completa ajustando -fullscreen en False.

Podríamos usar la función lambda para hacer la solución más simple.

import tkinter as tk


class Fullscreen_Example:
    def __init__(self):
        self.window = tk.Tk()
        self.window.attributes("-fullscreen", True)
        self.window.bind(
            "<F11>",
            lambda event: self.window.attributes(
                "-fullscreen", not self.window.attributes("-fullscreen")
            ),
        )
        self.window.bind(
            "<Escape>", lambda event: self.window.attributes("-fullscreen", False)
        )

        self.window.mainloop()


if __name__ == "__main__":
    app = Fullscreen_Example()
self.window.bind(
    "<F11>",
    lambda event: self.window.attributes(
        "-fullscreen", not self.window.attributes("-fullscreen")
    ),
)

Vincula la función lambda a F11, donde el estado actual de pantalla completa puede ser leído por self.window.attributes("-fullscreen") que devuelve el estado si no se da ningún valor en el método.

Ya no necesitamos la variable de estado fullScreenState si seguimos este enfoque.

Ubuntu root.attributes('-zoomed', True) para crear el modo de pantalla completa en Tkinter

El atributo -fullscreen sólo existe en Windows pero no en Linux o macOS. Ubuntu tiene un atributo comparable -zoomed para poner la ventana en modo de pantalla completa.

import tkinter as tk


class Ubuntu_Fullscreen_Example:
    def __init__(self):
        self.window = tk.Tk()
        self.window.attributes("-zoomed", True)
        self.fullScreenState = False
        self.window.bind("<F11>", self.toggleFullScreen)
        self.window.bind("<Escape>", self.quitFullScreen)

        self.window.mainloop()

    def toggleFullScreen(self, event):
        self.fullScreenState = not self.fullScreenState
        self.window.attributes("-zoomed", self.fullScreenState)

    def quitFullScreen(self, event):
        self.fullScreenState = False
        self.window.attributes("-zoomed", self.fullScreenState)


if __name__ == "__main__":
    app = Ubuntu_Fullscreen_Example()

Modo de pantalla completa con la barra de herramientas mostrada

El modo de pantalla completa que se muestra en los códigos anteriores hace que la barra de herramientas sea invisible. Si necesitamos mostrar la barra de herramientas en la ventana, la geometría de la ventana será la misma que la del tamaño del monitor.

import tkinter as tk


class Fullscreen_Example:
    def __init__(self):
        self.window = tk.Tk()
        self.fullScreenState = False
        self.window.attributes("-fullscreen", self.fullScreenState)

        self.w, self.h = (
            self.window.winfo_screenwidth(),
            self.window.winfo_screenheight(),
        )
        self.window.geometry("%dx%d" % (self.w, self.h))

        self.window.bind("<F11>", self.toggleFullScreen)
        self.window.bind("<Escape>", self.quitFullScreen)

        self.window.mainloop()

    def toggleFullScreen(self, event):
        self.fullScreenState = not self.fullScreenState
        self.window.attributes("-fullscreen", self.fullScreenState)

    def quitFullScreen(self, event):
        self.fullScreenState = False
        self.window.attributes("-fullscreen", self.fullScreenState)


if __name__ == "__main__":
    app = Fullscreen_Example()
self.w, self.h = self.window.winfo_screenwidth(), self.window.winfo_screenheight()

Los códigos winfo_screenwidth() y winfo_screenheight() obtienen la anchura y la altura del monitor.

self.window.geometry("%dx%d" % (self.w, self.h))

Establece el tamaño de la ventana de la GUI igual al ancho y alto del monitor, utilizando el método geometry.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - Tkinter Geometry