在 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】:我想这就是你要找的东西:
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 将退出该模式。当然,您可以更改程序,并可能获得安全的信息亭模式,但我没有尝试过。至少,您必须重写一堆键绑定。【参考方案2】:
这将创建一个全屏窗口。默认情况下,按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
的一部分,并且方法“几何”不是强制性的。仅当显式将窗口放置在屏幕上的某个位置时才应放置它【参考方案3】:
我认为如果您只寻找全屏,则无需设置几何或最大尺寸等。
你只需要这样做:
-如果你在 ubuntu 上工作:
root=tk.Tk()
root.attributes('-zoomed', True)
-如果您在 Windows 上工作:
root.state('zoomed')
现在用于在全屏之间切换,将其最小化到任务栏,您可以使用:
Root.iconify()
【讨论】:
【参考方案4】:这是一个简单的 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 时切换全屏。
【讨论】:
【参考方案5】:这将在 mac 上创建一个完全全屏的窗口(没有可见的菜单栏)而不会弄乱键绑定
import tkinter as tk
root = tk.Tk()
root.overrideredirect(True)
root.overrideredirect(False)
root.attributes('-fullscreen',True)
root.mainloop()
【讨论】:
【参考方案6】:是的,伙计,我试图在 Windows 中做同样的事情,而帮助我的是使用 root.state()
方法的一些 lambdas。
root = Tk()
root.bind('<Escape>', lambda event: root.state('normal'))
root.bind('<F11>', lambda event: root.state('zoomed'))
【讨论】:
【参考方案7】:root = Tk()
root.geomentry('1599x1499')
【讨论】:
这个答案假设了屏幕的尺寸。如果有人有不同尺寸的屏幕,或者代码预计在不同屏幕尺寸的机器上运行,这将没有用。一个好的答案将显示如何获取屏幕尺寸(但不重复任何现有答案)。以上是关于在 Tkinter 上显示全屏模式的主要内容,如果未能解决你的问题,请参考以下文章
全屏 Python TKinter 或 wxPython 窗口,但“停留在所有窗口的底部”?