HOWTO · Tkinter
如何在 Tkinter 中建立全屏視窗
本教程介紹瞭如何在 Tkinter 中建立全屏視窗。
本頁內容
若要讓 Tkinter 視窗全螢幕顯示,請將 -fullscreen 屬性設為 True。下方的 Windows 範例也會將 F11 綁定為切換全螢幕模式,並以 Escape 離開。在 Ubuntu 上,請使用 -zoomed 將視窗最大化。如果希望視窗填滿螢幕,同時保留標題列和邊框,則可改為將視窗尺寸設為螢幕大小。
執行此範例:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
is_fullscreen = True
is_fullscreen = not is_fullscreen
print(is_fullscreen)
False
這個簡短的狀態轉換示範了 Windows 範例使用的切換方式:每按一次 F11,就會變更目前狀態。下方的 GUI 範例適用於互動式桌面環境。如果無法開啟顯示裝置,範例會捕捉 tk.TclError,讓無頭環境中的執行程序正常結束,而不會假裝視窗已顯示;請在範例指定的平台上執行,才能查看視窗行為。
在 Windows 上將 Tkinter 視窗設為全螢幕
tk.Tk.attributes 可接受平台專用的視窗屬性。在 Windows 上,建立根視窗時將 -fullscreen 設為 True,即可在啟動時隱藏一般視窗裝飾。請讓儲存的狀態與這個初始設定一致,否則第一次按下 F11 時,可能會將屬性設為原本已有的值。按下 Escape 會同時將儲存的狀態和視窗屬性設為 False。
本節中的程式碼以及顯示的標籤或輸出仍為英文。
import os
import tkinter as tk
class FullscreenExample:
def __init__(self):
self.window = tk.Tk()
self.window.attributes("-fullscreen", True)
self.fullscreen = True
self.window.bind("<F11>", self.toggle_fullscreen)
self.window.bind("<Escape>", self.leave_fullscreen)
self.window.mainloop()
def toggle_fullscreen(self, event=None):
self.fullscreen = not self.fullscreen
self.window.attributes("-fullscreen", self.fullscreen)
def leave_fullscreen(self, event=None):
self.fullscreen = False
self.window.attributes("-fullscreen", False)
if __name__ == "__main__":
try:
FullscreenExample()
except tk.TclError as error:
display_error = str(error)
event 參數讓 Tkinter 能將按鍵事件傳給各個處理函式。如果不想另外儲存狀態變數,可以使用 lambda 讀取目前的屬性值並將它反轉:
import os
import tkinter as tk
try:
window = tk.Tk()
window.attributes("-fullscreen", True)
window.bind(
"<F11>",
lambda event: window.attributes(
"-fullscreen", not window.attributes("-fullscreen")
),
)
window.bind("<Escape>", lambda event: window.attributes("-fullscreen", False))
window.mainloop()
except tk.TclError as error:
display_error = str(error)
不帶參數的 attributes("-fullscreen") 會讀取目前的值。這種做法可避免維護兩份必須保持同步的狀態。如果較大型的應用程式在離開全螢幕時也應關閉視窗,請將 Escape 綁定至一般的關閉處理函式。
在 Ubuntu 上使用 zoomed 視窗屬性
Ubuntu 的 Tk 視窗管理器支援 -zoomed 屬性,可將視窗最大化。這與無邊框的 -fullscreen 行為不同;若想使用桌面環境一般的最大化視窗樣式,請選擇此方式。此範例適用於 Ubuntu;若要用於其他 Linux 發行版或 macOS,請先另外確認其行為。
本節中的程式碼以及顯示的標籤或輸出仍為英文。
import os
import tkinter as tk
class UbuntuZoomedExample:
def __init__(self):
self.window = tk.Tk()
self.window.attributes("-zoomed", True)
self.zoomed = True
self.window.bind("<F11>", self.toggle_zoomed)
self.window.bind("<Escape>", self.leave_zoomed)
self.window.mainloop()
def toggle_zoomed(self, event=None):
self.zoomed = not self.zoomed
self.window.attributes("-zoomed", self.zoomed)
def leave_zoomed(self, event=None):
self.zoomed = False
self.window.attributes("-zoomed", False)
if __name__ == "__main__":
try:
UbuntuZoomedExample()
except tk.TclError as error:
display_error = str(error)
與 Windows 範例相同,由於視窗啟動時已最大化,請將儲存的狀態初始化為 True。第一次按下 F11 時,視窗會還原;再次按下則會重新最大化。按下 Escape 會還原一般視窗狀態。如果目前環境的視窗管理器不支援此屬性,可以改用下方填滿螢幕並保留裝飾的方式,或在目標 Ubuntu 桌面環境中確認其行為。
填滿螢幕並保留視窗裝飾
若要保留標題列和邊框,請使用 winfo_screenwidth() 和 winfo_screenheight() 設定視窗要求的寬度與高度。geometry 方法接受例如 1440x900 這樣的尺寸;加上 +0+0 可將視窗放在螢幕左上角。視窗管理器裝飾也會占用空間,因此即使要求的客戶區尺寸與螢幕相同,視窗外框仍可能稍微超出螢幕範圍。此方式不會使用 -fullscreen,也不提供全螢幕切換功能。
本節中的程式碼以及顯示的標籤或輸出仍為英文。
import os
import tkinter as tk
try:
window = tk.Tk()
width = window.winfo_screenwidth()
height = window.winfo_screenheight()
window.geometry(f"{width}x{height}+0+0")
window.mainloop()
except tk.TclError as error:
display_error = str(error)
螢幕尺寸方法會回傳 Tkinter 所回報顯示器的像素尺寸。如果視窗需要限制在不含面板或 Dock 的工作區內,請改用符合該工作區的尺寸,而非整個螢幕的大小。如需 Tkinter 入門介紹,請參閱 Tkinter;如需了解 geometry 方法,請參閱 Tkinter Geometry Managers。