Как создать полноэкранное окно в Tkinter

Jinku Hu 30 Январь 2023 18 Апрель 2020
  1. Windows root.attributes('-fullscreen', True) для создания полноэкранного режима в Tkinter
  2. Ubuntu root.attributes('-zoomed', True) для создания полноэкранного режима в Tkinter
  3. Отображение полноэкранного режима с помощью Панели инструментов
Как создать полноэкранное окно в Tkinter

В этом уроке мы расскажем, как создавать полноэкранное окно в Tkinter, а также как переключать и выходить из полноэкранного режима.

Windows root.attributes('-fullscreen', True) для создания полноэкранного режима в Tkinter

tk.Tk.attributes устанавливает атрибуты, специфичные для платформы. Атрибуты в Windows,

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

-fullscreen указывает, является ли окно полноэкранным или нет.

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)

F11 привязывается к функции toggleFullScreen.

    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)

Функция quitFullScreen выходит из полноэкранного режима, установив -fullscreen в False.

Мы могли бы использовать функцию lambda, чтобы сделать решение более простым.

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

Она привязывает функцию lambda к F11, где текущее полноэкранное состояние может быть прочитано self.window.attributes("-fullscreen"), которая возвращает состояние, если в методе не задано ни одного значения.

Переменная состояния fullScreenState нам больше не нужна, если мы будем следовать этому подходу.

Ubuntu root.attributes('-zoomed', True) для создания полноэкранного режима в Tkinter

Атрибут -fullscreen существует только в Windows, но не в Linux или macOS. Ubuntu имеет сопоставимый атрибут -zoomed для установки окна в полноэкранном режиме.

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

Отображение полноэкранного режима с помощью Панели инструментов

Полноэкранный режим, показанный в приведенных выше кодах, делает панель инструментов невидимой. Если необходимо показать панель инструментов в окне, то геометрия окна будет совпадать с размером монитора.

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

winfo_screenwidth() и winfo_screenheight() получают ширину и высоту монитора.

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

Он устанавливает размер окна GUI, равный ширине и высоте монитора, используя метод geometry методика.

Author: 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

Сопутствующая статья - Tkinter Geometry