2011-11-01 144 views
26

Tkinterでフレームをフルスクリーンモードで表示するにはどうすればよいですか? ? ?私はこのコードを見て、それは、非常に便利ですTkinterでフルスクリーンモードを表示

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

が、私はEscキーを打ったときに自動的に「」ウィンドウ「を下に復元」は、可能ということでしょうか? おそらく、それは非常に複雑なコード、plsの助けです。

答えて

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

をめちゃくちゃにせずに(目に見えるメニューバーを)Mac上で完全にフルスクリーンウィンドウを作成します。注: '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を使用することができます。

それからちょうどエスケープキーを結合して、ハンドラにこれを追加します。

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() 

をあなたも、そこに、メニューを非表示にする場合は、私がそれをすることが分かったのは2つの方法だけです。一つはそれを破壊することです。もう1つは、空白のメニューを作成して切り替えることです。

self.tk.config(menu=self.blank_menu) # self.blank_menu is a Menu object 

次に、再度表示する場合は、メニューに戻します。あなたがUbuntuの上で作業している-IF

::あなたはこれを行う必要

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など

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

- そして、あなたがWindows上で作業している場合:

root.state('zoomed') 
あなたが使用することができますタスクバーにそれを最小限にするため、フルスクリーンの間で切り替えるための今すぐ

Root.iconify() 
4

これはキーバインド

import tkinter as tk 
root = tk.Tk() 

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


root.mainloop() 
関連する問題