2011-11-01 56 views
26

如何让Tkinter中的框架以全屏模式显示? ? ?我看到这个代码,这是非常有用的,它是非常有用的,但是这是一个可能的,当我点击Esc自动''还原''窗口? 可能它是一个非常复杂的代码,请帮助。在Tkinter上显示全屏模式

回答

18

这会创建一个全屏窗口。按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() 
+2

注意:''root.overrideredirect(True)'''不会在我的机器上调用任何东西(Ubuntu)。没有'root.overrideredirect'就会显示标题栏。 – jfs

+1

这对我不起作用。它唯一做的事情是最大化窗口。 – exhuma

+2

这不是全屏,但最大化...不完全相同,对于真正的全屏,请参阅@Shule的答案 – dm76

47

我认为这是你在找什么:

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

可以使用wm_attributes,而不是attributes了。

然后,只需绑定ESC键和它添加到处理程序:

Tk.attributes("-fullscreen", False) 

的答案提到这一点(与wm_attributes)另一个问题。所以,我就是这么发现的。但是,没有人直接出去说这是因为某种原因的答案。所以,我觉得这是值得发布。

下面是一个使用F11切换全屏和关闭,并在那里工作的例子(上是Xubuntu 14.04测试)逃避只会将其关闭:

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. 
+2

为什么你手动使用'w.tk.destroy'?我从来没有在Python Tk应用程序中看到过这个。 – exhuma

+1

@exhuma(出于某种原因,我没有看到您的评论。)好的问题。感谢您指出了这一点。这里似乎没有必要。我想我在第一次开始Tkinter编程时看到别人这样做了,我没有多想它就继续保持它。然而,在我编程一次的某个程序或其他程序中可能有其原因,但我不知道是什么原因。无论如何,它不会影响执行,但是我将在此处将代码编辑出来,并将主循环放在构造函数的外部。 – Shule

+2

@exhuma我发现背后有一些原因。显然,没有它的某些开发环境会发生故障(尽管在常规Python环境中似乎并不需要它)。此链接提供了一个代码示例和解释:http://effbot.org/tkinterbook/tkinter-hello-again.htm – Shule

6

我认为,如果你正在寻找全屏而已,没有必要设置几何形状或MAXSIZE等

你只需要做到这一点:

- 如果您正在Ubuntu上:

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

-and如果您正在使用的窗口:

root.state('zoomed') 

现在对于全屏之间切换,以最小化它到任务栏,你可以使用:

Root.iconify() 
4

这将创建在Mac上完全全屏窗口(无可见的菜单栏)不搞乱键绑定

import tkinter as tk 
root = tk.Tk() 

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


root.mainloop() 
相关问题