2011-11-01 94 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() 
相關問題