在Tkinter上显示全屏模式

DRd*_*Rdr 38 python tkinter

如何在全屏模式下在Tkinter显示中制作画面?我看到了这段代码,它非常有用......:

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

...但是是否可以编辑代码以便命中 Esc 自动使窗口"恢复"?

Shu*_*ule 67

我想这就是你要找的东西:

Tk.attributes("-fullscreen", True)  # substitute `Tk` for whatever your `Tk()` object is called
Run Code Online (Sandbox Code Playgroud)

您也可以使用wm_attributes而不是attributes.

然后绑定转义键并将其添加到处理程序:

Tk.attributes("-fullscreen", False)
Run Code Online (Sandbox Code Playgroud)

另一个问题的答案提到了这个(带wm_attributes).所以,这就是我发现的方式.但是,没有人只是直接出去说并且出于某种原因这是答案.所以,我觉得值得张贴.

这是一个工作示例(在Xubuntu 14.04上测试),它使用F11来打开和关闭全屏,并且escape只会将其关闭:

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()
Run Code Online (Sandbox Code Playgroud)

如果你想隐藏一个菜单,我发现只有两种方法可以做到这一点.一个是摧毁它.另一种是制作一个空白菜单来切换.

self.tk.config(menu=self.blank_menu)  # self.blank_menu is a Menu object
Run Code Online (Sandbox Code Playgroud)

然后,当您希望它再次显示时,将其切换回菜单.

self.tk.config(menu=self.menu)  # self.menu is your menu.
Run Code Online (Sandbox Code Playgroud)

  • 你为什么要手动使用`w.tk.destroy`?我之前从未在Python Tk应用程序中看到过这个. (2认同)
  • @exhuma我发现了一些背后的原因.显然,某些开发环境在没有它的情况下会出现故障(尽管在常规Python环境中似乎并不需要它).此链接提供了一个代码示例和说明:http://effbot.org/tkinterbook/tkinter-hello-again.htm (2认同)

unu*_*tbu 29

这将创建一个全屏窗口.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()
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用。它唯一能做的就是最大化窗口。 (4认同)
  • 这不是全屏但是最大化......不完全相同,对于真正的全屏,请参阅@Shule的回答 (4认同)
  • 注意:使用`root.overrideredirect(True)```<Escape>`不会在我的机器上调用任何东西(Ubuntu).如果没有`root.overrideredirect`,则会显示标题栏. (2认同)

小智 13

我想如果你只是在寻找全屏,不需要设置几何或maxsize等.

你只需要这样做:

- 如果您正在使用ubuntu:

root=tk.Tk()
root.attributes('-zoomed', True)
Run Code Online (Sandbox Code Playgroud)

- 如果您正在使用Windows:

root.state('zoomed')
Run Code Online (Sandbox Code Playgroud)

现在要在全屏之间切换,为了将其最小化到任务栏,您可以使用:

Root.iconify()
Run Code Online (Sandbox Code Playgroud)


小智 11

这是一个简单的 lambda 解决方案:

root = Tk()
root.attributes("-fullscreen", True)
root.bind("<F11>", lambda event: root.attributes("-fullscreen",
                                    not root.attributes("-fullscreen")))
root.bind("<Escape>", lambda event: root.attributes("-fullscreen", False))
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

这将使屏幕在按下 Esc 时退出全屏,并在按下 F11 时切换全屏。


Tra*_*rav 8

这将在mac上创建一个完全全屏的窗口(没有可见的菜单栏)而不会弄乱键绑定

import tkinter as tk
root = tk.Tk()

root.overrideredirect(True)
root.overrideredirect(False)
root.attributes('-fullscreen',True)


root.mainloop()
Run Code Online (Sandbox Code Playgroud)