2011-11-01 59 views
26

¿Cómo se puede obtener un fotograma en Tkinter para mostrar en modo pantalla completa? ? ? Vi este código, es muy útiles,Mostrar el modo de pantalla completa en Tkinter

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

pero es que una posible, cuando golpeo Esc que automáticamente '' Restaurar '' de la ventana? Probablemente es un código muy complicado, por favor ayuda.

Respuesta

18

Esto crea una ventana de pantalla completa. Al presionar Escape se cambia el tamaño de la ventana a '200x200 + 0 + 0' de forma predeterminada. Si mueve o cambia el tamaño de la ventana, Escape alterna entre la geometría actual y la geometría anterior.

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

nota: con 'root.overrideredirect (True)' el '' no llama nada en mi máquina (Ubuntu). Sin 'root.overrideredirect' se muestra la barra de título. – jfs

+1

Esto no funciona para mí. Lo único que hace es maximizar la ventana. – exhuma

+2

Esto no es a pantalla completa, pero maximizado ... no es lo mismo, para la pantalla completa verdadera, ver respuesta de @Shule – dm76

47

creo que esto es lo que está buscando:

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

Usted puede utilizar en lugar de wm_attributesattributes, también.

A continuación, sólo obligar a la tecla de escape y añadir esta al controlador:

Tk.attributes("-fullscreen", False) 

Una respuesta a otra pregunta alude a esta (con wm_attributes). Entonces, así es como me enteré. Pero, nadie salió directamente y dijo que era la respuesta por alguna razón. Entonces, pensé que valía la pena publicarlo.

Aquí está un ejemplo de trabajo (probado en Xubuntu 14.04) que utiliza F11 para cambiar a pantalla completa dentro y fuera y en donde la salida será apagarlo solamente:

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 desea ocultar un menú, también, hay son solo dos formas que he encontrado para hacer eso. Uno es destruirlo. El otro es hacer un menú en blanco para cambiar.

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

A continuación, vuelva a cambiarlo a su menú cuando desee que vuelva a aparecer.

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

¿Por qué estás usando 'w.tk.destroy' manualmente? Nunca antes había visto esto en una aplicación Python Tk. – exhuma

+1

@exhuma (hasta ahora no he visto tu comentario por alguna razón). Buena pregunta. Gracias por señalar eso. Parece innecesario aquí. Creo que vi a alguien más hacerlo cuando estaba comenzando la programación de Tkinter, y lo seguí sin pensar demasiado. Sin embargo, puede haber una razón para ello en algún programa que estuve programando una vez, pero no sé cuál fue esa razón. En cualquier caso, no afecta la ejecución, pero lo editaré aquí y pondré el mainloop fuera del constructor también. – Shule

+2

@exhuma Encontré alguna razón detrás de esto. Aparentemente, algunos entornos de desarrollo funcionan mal sin él (aunque parece que no lo necesita en el entorno normal de Python). Este enlace proporciona un ejemplo de código y una explicación: http://effbot.org/tkinterbook/tkinter-hello-again.htm – Shule

6

Creo que si se busca a pantalla completa solamente, ninguna necesidad de fijar geometría o maxsize etc.

Sólo tiene que hacer esto:

-Si se está trabajando en ubuntu:

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

-y si se está trabajando en windows:

root.state('zoomed') 

Ahora, para alternar entre pantalla completa, para minimizar a la barra de tareas que puede utilizar:

Root.iconify() 
4

Esto creará una ventana por completo de pantalla completa en Mac (sin barra de menú visible) sin estropear combinaciones de teclas

import tkinter as tk 
root = tk.Tk() 

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


root.mainloop() 
Cuestiones relacionadas