2011-11-01 7 views
26

Comment peut-on obtenir une image dans Tkinter pour afficher en mode plein écran? ? ? J'ai vu ce code, il est très utile,Afficher le mode plein écran sur Tkinter

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

mais il est possible que, quand je frappe Esc qu'automatiquement « » Restaurer vers le bas « » la fenêtre? Probablement c'est un code très compliqué, l'aide de pls.

Répondre

18

Cela crée une fenêtre en plein écran. En appuyant sur Escape, vous redimensionnez la fenêtre par défaut à '200x200 + 0 + 0'. Si vous déplacez ou redimensionnez la fenêtre, Escape bascule entre la géométrie actuelle et la géométrie précédente.

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

note: avec 'root.overrideredirect (True)' le '' n'appelle rien sur ma machine (Ubuntu). Sans 'root.overrideredirect', la barre de titre est affichée. – jfs

+1

Cela ne fonctionne pas pour moi. La seule chose à faire est de maximiser la fenêtre. – exhuma

+2

Ce n'est pas en plein écran mais maximisé ... pas tout à fait la même chose, pour le vrai plein écran, voir la réponse de @Shule – dm76

47

Je pense que c'est ce que vous cherchez:

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

Vous pouvez utiliser wm_attributes au lieu de attributes aussi.

Rabattre simplement la touche d'échappement et l'ajouter au gestionnaire:

Tk.attributes("-fullscreen", False) 

Une réponse à une autre question fait allusion à cette (avec wm_attributes). Donc, c'est comme ça que j'ai découvert. Mais, personne n'est sorti directement et a dit que c'était la réponse pour une raison quelconque. Donc, je me suis dit que ça valait la peine de poster.

Voici un exemple de travail (testé sur Xubuntu 14.04) qui utilise F11 pour basculer en plein écran sur et en dehors et où échapper s'éteindre seulement:

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

Si vous voulez cacher un menu aussi, il Je n'ai trouvé que deux façons de le faire. L'un est de le détruire. L'autre est de faire un menu vide pour basculer entre.

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

Puis revenez à votre menu lorsque vous voulez qu'il s'affiche à nouveau.

self.tk.config(menu=self.menu) # self.menu is your menu. 
+2

Pourquoi utilisez-vous manuellement 'w.tk.destroy'? Je n'ai jamais vu cela dans une application Python Tk avant. – exhuma

+1

@exhuma (Je n'ai pas vu votre commentaire jusqu'à maintenant pour une raison quelconque.) Bonne question. Merci d'avoir fait remarquer cela. Cela semble inutile ici. Je pense que j'ai vu quelqu'un d'autre le faire quand j'ai commencé à programmer Tkinter pour la première fois, et j'ai continué sans trop y penser. Cependant, il y avait peut-être une raison à cela dans un programme ou un autre que je programmais une fois, mais je ne sais pas quelle était cette raison. Quoi qu'il en soit, cela ne nuit pas à l'exécution, mais je vais l'éditer hors du code ici et mettre le mainloop en dehors du constructeur, aussi. – Shule

+2

@exhuma J'ai trouvé une raison derrière cela. Apparemment, certains environnements de développement ne fonctionnent pas correctement (même si vous ne semblez pas en avoir besoin dans l'environnement Python habituel). Ce lien fournit un exemple de code et une explication: http://effbot.org/tkinterbook/tkinter-hello-again.htm – Shule

6

Je pense que si vous cherchez seulement plein écran, pas besoin de définir la géométrie ou maxsize etc.

Vous avez juste besoin de faire ceci:

-Si vous travaillez sur ubuntu:

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

-et si vous travaillez sur les fenêtres:

root.state('zoomed') 

Maintenant, pour basculer entre plein écran, pour minimiser à vous barre des tâches peut utiliser:

Root.iconify() 
4

Cela va créer une fenêtre complètement plein écran sur mac (sans barre de menus visible) sans chambouler keybindings

import tkinter as tk 
root = tk.Tk() 

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


root.mainloop()