在 Tkinter 上显示全屏模式
Posted
技术标签:
【中文标题】在 Tkinter 上显示全屏模式【英文标题】:Display fullscreen mode on Tkinter 【发布时间】:2011-12-19 10:46:55 【问题描述】:如何在 Tkinter 中以全屏模式显示框架?我看到了这段代码,非常有用……:
>>> import Tkinter
>>> root = Tkinter.Tk()
>>> root.overrideredirect(True)
>>> root.geometry("0x1+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
...但是是否可以编辑代码,以便点击 Esc 自动使窗口“恢复”?
【问题讨论】:
【参考方案1】:root = Tk()
root.geomentry('1599x1499')
【讨论】:
这个答案假设了屏幕的尺寸。如果有人有不同尺寸的屏幕,或者代码预计在不同屏幕尺寸的机器上运行,这将没有用。一个好的答案将显示如何获取屏幕尺寸(但不重复任何现有答案)。【参考方案2】:是的,伙计,我试图在 Windows 中做同样的事情,而帮助我的是使用 root.state()
方法的一些 lambdas。
root = Tk()
root.bind('<Escape>', lambda event: root.state('normal'))
root.bind('<F11>', lambda event: root.state('zoomed'))
【讨论】:
【参考方案3】:这是一个简单的 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()
这将在按下 Escape 时使屏幕退出全屏,并在按下 F11 时切换全屏。
【讨论】:
【参考方案4】:这将在 mac 上创建一个完全全屏的窗口(没有可见的菜单栏),而不会弄乱键绑定
import tkinter as tk
root = tk.Tk()
root.overrideredirect(True)
root.overrideredirect(False)
root.attributes('-fullscreen',True)
root.mainloop()
【讨论】:
【参考方案5】:我认为如果您只寻找全屏,则无需设置几何或最大尺寸等。
你只需要这样做:
-如果你在 ubuntu 上工作:
root=tk.Tk()
root.attributes('-zoomed', True)
-如果您在 Windows 上工作:
root.state('zoomed')
现在用于在全屏之间切换,将其最小化到任务栏,您可以使用:
Root.iconify()
【讨论】:
【参考方案6】:我想这就是你要找的东西:
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 来打开和关闭全屏,而 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()
如果您也想隐藏菜单,我发现只有两种方法可以做到这一点。一是摧毁它。另一种是制作空白菜单进行切换。
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.
【讨论】:
为什么要手动使用w.tk.destroy
?我以前从未在 Python Tk 应用程序中看到过这种情况。
@exhuma(由于某种原因,我直到现在才看到您的评论。)好问题。感谢您指出了这一点。这里似乎没有必要。我想当我第一次开始 Tkinter 编程时,我看到其他人这样做了,我没有多想就一直坚持下去。但是,我曾经编程过的某个程序或其他程序中可能有它的原因,但我不知道那个原因是什么。无论如何,它不会影响执行,但我会从这里的代码中编辑它并将主循环也放在构造函数之外。
@exhuma 我找到了它背后的一些原因。显然,一些开发环境在没有它的情况下会出现故障(尽管您在常规 Python 环境中似乎不需要它)。此链接提供代码示例和说明:effbot.org/tkinterbook/tkinter-hello-again.htm
这基本上让您能够使用 TKinter 运行信息亭吗?
@BillGreer 基本上,是的,但是在上面的示例中,您仍然可以按 Alt+F4 关闭程序和内容,并且它已被编程,因此再次按 F11,否则 Esc 将退出该模式。当然,您可以更改程序,并可能获得安全的信息亭模式,但我没有尝试过。至少,您必须重写一堆键绑定。【参考方案7】:
这将创建一个全屏窗口。默认情况下,按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("0x1+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()
【讨论】:
注意:root.overrideredirect(True)
<Escape>
不会在我的机器上调用任何东西(Ubuntu)。如果没有root.overrideredirect
,则会显示标题栏。
这对我不起作用。它唯一做的就是最大化窗口。
这不是全屏,而是最大化...不太一样,对于真正的全屏,请参阅@Shule 的回答
+0+0
是self._geom
的一部分,并且方法“几何”不是强制性的。仅当显式将窗口放置在屏幕上的某个位置时才应放置它以上是关于在 Tkinter 上显示全屏模式的主要内容,如果未能解决你的问题,请参考以下文章
全屏 Python TKinter 或 wxPython 窗口,但“停留在所有窗口的底部”?