2011-11-01 47 views
26

Come si può ottenere un frame in Tkinter da visualizzare in modalità schermo intero? ? ? Ho visto questo codice, è molto utile,Visualizza la modalità schermo intero su Tkinter

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

ma è che una possibile, quando mi sono accorto che Esc automaticamente '' Restore down '' la finestra? Probabilmente è un codice molto complicato, pls help.

risposta

18

Questo crea una finestra a schermo intero. La pressione di Escape ridimensiona la finestra su "200x200 + 0 + 0" per impostazione predefinita. Se si sposta o ridimensiona la finestra, Escape passa dalla geometria corrente alla geometria precedente.

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)' il '' non chiama nulla sulla mia macchina (Ubuntu). Senza 'root.overrideredirect' viene mostrata la barra del titolo. – jfs

+1

Questo non funziona per me. L'unica cosa che fa è massimizzare la finestra. – exhuma

+2

Questo non è a schermo intero ma ingrandito ... non proprio uguale, per vero a schermo intero, vedi risposta da @Shule – dm76

47

credo che questo è quello che stai cercando:

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

È possibile utilizzare wm_attributes invece di attributes, anche.

Poi basta associare il tasto Esc e aggiungere questo al gestore:

Tk.attributes("-fullscreen", False) 

Una risposta ad un'altra domanda accennato a questo (con wm_attributes). Quindi, è così che l'ho scoperto. Ma nessuno uscì direttamente e disse che era la risposta per qualche motivo. Quindi, ho pensato che valesse la pena postare.

Ecco un esempio di lavoro (testato su Xubuntu 14.04) che usa F11 per attivare lo schermo intero e lo spegnimento e dove la fuga si spegnerlo solo:

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

Se si desidera nascondere un menu, anche, ci sono solo due modi in cui ho trovato di farlo. Uno è distruggerlo. L'altro è di creare un menu vuoto per passare da uno all'altro.

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

quindi accenderlo di nuovo al vostro menu quando si desidera mostrare di nuovo.

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

Perché stai usando manualmente 'w.tk.destroy'? Non l'ho mai visto prima in un'applicazione Python Tk. – exhuma

+1

@exhuma (non ho visto il tuo commento fino ad ora per qualche motivo.) Bella domanda. Grazie per la segnalazione. Sembra inutile qui. Penso di aver visto qualcun altro farlo quando stavo iniziando la programmazione con Tkinter, e ho continuato senza pensarci troppo. Tuttavia, potrebbe esserci stato un motivo in alcuni programmi o in altri che stavo programmando una volta, ma non so quale fosse questa ragione. In ogni caso, non danneggia l'esecuzione, ma lo modificherò dal codice qui e inserirò il mainloop anche all'esterno del costruttore. – Shule

+2

@exhuma ho trovato qualche motivo dietro di esso. Apparentemente, alcuni ambienti di sviluppo funzionano male senza di esso (anche se non sembrano averne bisogno nel normale ambiente Python). Questo link fornisce un esempio di codice e una spiegazione: http://effbot.org/tkinterbook/tkinter-hello-again.htm – Shule

6

Penso che se siete alla ricerca di schermo intero solo, non c'è bisogno di impostare la geometria o maxsize ecc

Hai solo bisogno di fare questo:

-Se si sta lavorando su Ubuntu:

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

-e se si sta lavorando su Windows:

root.state('zoomed') 

Ora per commutazione a schermo intero, per ridurre al minimo a barra delle applicazioni è possibile utilizzare:

Root.iconify() 
4

Questo creerà una finestra completamente a schermo intero su Mac (senza barra dei menu visibile) senza rovinare keybindings

import tkinter as tk 
root = tk.Tk() 

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


root.mainloop() 
Problemi correlati