在Tkinter中显示全屏模式

69 投票
8 回答
235732 浏览
提问于 2025-04-17 05:25

我想知道怎么让Tkinter里的窗口全屏显示。我看到了一段代码,感觉挺有用的……:

>>> import Tkinter
>>> root = Tkinter.Tk()
>>> root.overrideredirect(True)
>>> root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))

……不过能不能改一下这段代码,让我按下 Esc 键的时候,窗口自动变回原来的大小呢?

8 个回答

31

我觉得如果你只想要全屏显示,就不需要设置窗口大小或者最大尺寸等等。

你只需要这样做:

- 如果你在使用Ubuntu系统:

root=tk.Tk()
root.attributes('-zoomed', True)

- 如果你在使用Windows系统:

root.state('zoomed')

现在,如果你想在全屏和最小化到任务栏之间切换,可以使用:

Root.iconify()
111

我觉得这就是你想要的内容:

Tk.attributes("-fullscreen", True)  # substitute `Tk` for whatever your `Tk()` object is called

你也可以用 wm_attributes 来代替 attributes

然后只需要绑定一下退出键,并把这个加到处理程序里:

Tk.attributes("-fullscreen", False)

之前有个回答提到过这个(用 wm_attributes)。所以我才知道的。不过,奇怪的是,没有人直接说这是答案。所以我觉得分享一下是值得的。

这里有个可以运行的例子(在 Xubuntu 14.04 上测试过),它用 F11 键来切换全屏和窗口模式,而退出键只会关闭全屏:

import sys
if sys.version_info[0] == 2:  # Just checking your Python version to import Tkinter properly.
    from Tkinter import *
else:
    from tkinter import *


class Fullscreen_Window:

    def __init__(self):
        self.tk = Tk()
        self.tk.attributes('-zoomed', True)  # This just maximizes it so we can see the window. It's nothing to do with fullscreen.
        self.frame = Frame(self.tk)
        self.frame.pack()
        self.state = False
        self.tk.bind("<F11>", self.toggle_fullscreen)
        self.tk.bind("<Escape>", self.end_fullscreen)

    def toggle_fullscreen(self, event=None):
        self.state = not self.state  # Just toggling the boolean
        self.tk.attributes("-fullscreen", self.state)
        return "break"

    def end_fullscreen(self, event=None):
        self.state = False
        self.tk.attributes("-fullscreen", False)
        return "break"

if __name__ == '__main__':
    w = Fullscreen_Window()
    w.tk.mainloop()

如果你还想隐藏一个菜单,我找到的只有两种方法。一种是直接把它删除。另一种是做一个空菜单来切换。

self.tk.config(menu=self.blank_menu)  # self.blank_menu is a Menu object

然后在你想让菜单再次出现的时候,再切换回你的菜单。

self.tk.config(menu=self.menu)  # self.menu is your menu.
39

这个代码会创建一个全屏的窗口。按下 Escape 键时,窗口会默认调整到 '200x200+0+0' 的大小。如果你移动或者改变了窗口的大小,再按 Escape 键,就会在当前的窗口状态和之前的状态之间切换。

import Tkinter as tk

class FullScreenApp(object):
    def __init__(self, master, **kwargs):
        self.master=master
        pad=3
        self._geom='200x200+0+0'
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))
        master.bind('<Escape>',self.toggle_geom)            
    def toggle_geom(self,event):
        geom=self.master.winfo_geometry()
        print(geom,self._geom)
        self.master.geometry(self._geom)
        self._geom=geom

root=tk.Tk()
app=FullScreenApp(root)
root.mainloop()

撰写回答