Quiero crear un panel de pantalla completa que bloquea visualmente el acceso a todo en la pantalla (escritorio, menú, Unity Panel, etc. en Ubuntu (11.10)), pero permanece debajo de las ventanas abiertas de otras aplicaciones.Pantalla completa Python TKinter o ventana de wxPython, pero "quédate en la parte inferior" de todas las ventanas?
Esto es principalmente para hacer que la computadora portátil sea a prueba de niños. Quiero que el niño (4 años) tenga acceso a algunas aplicaciones seleccionadas, es decir. gcompris, childs play, tux math, etc., pero no realmente a otras aplicaciones y configuraciones. Algo así como escritorio personalizado + panel de iniciador sin nada que romper, sin acceso a archivos, etc.
Quiero que el panel contenga algunos botones que iniciarían otras aplicaciones (usando subprocess.call) pero el panel en sí tiene que permanecer bajo cualquier cosa que se inicie a partir de ella o para facilitar las cosas, de modo que permanezca en cualquier juego abierto de pantalla completa y en cada ventana abierta (incluso cuando el panel se enfoca).
Python tkinter a pantalla completa overrideredirect (True) sería perfecto (con un botón de cierre protegido con contraseña) si no es el hecho de que no permite que otras aplicaciones aparezcan sobre él y no estoy seguro de si es posible hacerlo alójate en el fondo de todo.
¿Alguna idea de cómo cambiar este comportamiento si es posible, o cualquier otra herramienta que me permita hacer esto en python o de otra manera?
Editar: Información adicional:
lo tengo casi trabajando pero otro comportamiento extraño con overrideredirect (Verdadero). Podría bajar() la aplicación al principio y está bien, pero cuando lo hago con overrideredirect (True) la aplicación desaparece por completo. No pantalla completa código de prueba a continuación:
from tkinter import *
def btn1_click():app.quit();app.destroy()
def btn2_click():app.lower()
def handler():
if tkinter.messagebox.askyesno("Quit?", "Are you sure you want to quit?"):
app.quit();app.destroy()
app = Tk()
app.title("Testing...")
app.geometry('300x100+200+100')
#app.overrideredirect(True)
#app.lower()
b1 = Button(app, text = "Exit!", width = 10, command = btn1_click);b1.pack()
b2 = Button(app, text = "Lower", width = 10, command = btn2_click);b2.pack()
app.protocol("WM_DELETE_WINDOW", handler)
app.mainloop()
cuando se ejecuta, ya que es se abrirá una nueva ventana y pulsando el botón 'Baja', lo enviará a la parte de atrás, pero si se quite la app.overrideredirect (Verdadero) línea y presione el botón, la aplicación seguirá ejecutándose pero ya no estará visible.
Editar ... Ok, creo que lo entiendo:
>>>help(tkinter)
...
| overrideredirect = wm_overrideredirect(self, boolean=None)
| Instruct the window manager to ignore this widget
| if BOOLEAN is given with 1. Return the current value if None
| is given.
...
Así, en primer lugar pido al gestor de ventanas no hacer caso de mi ventana, pero más tarde todavía quiero el wm que hacer algo para mi ventana ... hipócrita :)
¿Alguna otra forma de quitar la decoración de la ventana sin pedirle a la mujer que ignore la ventana?
Editar. Otro vistazo al problema con una herramienta diferente - wxPython
Esta vez lo intento de la manera más fácil: usando el Boa Constructor. Mientras app.lower() en un Marco con ventana funcionó bien con Tkinter, por alguna razón tengo un problema con wxPython ahora. En el siguiente código: al presionar el botón, se abre una ventana de gedit sobre el fotograma, luego de 2 segundos el fotograma se lleva a la parte superior y otros 2 segundos más tarde, debe caer al final de la ventana, pero eso no sucede, al menos no en mi Ubuntu.
def OnButton3Button(self, event):
subprocess.call("gedit") #opens gedit above the Frame
time.sleep(2) #waits for 2 seconds
self.Raise() #brings the Frame to the top
time.sleep(2) #waits for another 2 seconds
self.Lower() #should Lower the Frame to the bottom, but it doesn't
si podía hacer el Bajo() Trabajo de alguna manera sería hacer fácilmente es decir .:
def OnFrame1Activate(self, event):
self.ShowFullScreen(True)
def OnFrame1EnterWindow(self, event):
self.Lower()
Ahora me quedo sin ideas, probablemente solo se adherirá a la cuenta de invitado como sugirió.
¿Qué tal haga clic en "Cambiar de usuario"> Pensiones? – unutbu
Gracias por la sugerencia, vale la pena intentarlo, habilitará al Invitado y verá si la cuenta "Invitado" es a prueba del usuario, quiero decir "sin leer el clic aleatorio", pero aún me pregunto si es posible bloquear todo con Python :) – Ireneusz