Ventana Python (Solucionado)

Imagen de Alexnux
0 puntos

Hola amigos.

Desde un script bash ejecuto un scrip python que consiste en abrir una ventana. La cuestión es que cuando se ejecuta este último, el programa parece que se queda dormido esperando que la ventana se cierre.

La aplicación consiste en detectar si existe la tarjeta correcta en un detector de tarjeta. En tal caso, cerrar la ventana python y poder usar el equipo. En caso contrario, mantener la ventana y el equipo inutilizabe -o cuanto menos, no usable firefox-.

Repito que el problema surge al mostrar la ventana. Mientras está visible, firefox -o el equipo- se ejecutan, cuando debería impedir precisamente eso.

Muestro el código del fichero Python:

# !/usr/bin/env python
# ejemplo helloworld.py

import pygtk
pygtk.require('2.0')
import gtk
import os

class HelloWorld:

def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("destroy", self.destroy)
self.window.set_border_width(10)
self.button = gtk.Button("Introduzca tarjeta")
self.button.connect_object("clicked", gtk.Widget.destroy, self.window)
self.window.add(self.button)
self.button.show()
self.window.show()
self.window.resize(250, 150)

def destroy(self, widget, data=None):
os.system("uname -a") # Muestro esta línea para comprobar la ejecución.
gtk.main_quit()

def main(self):
gtk.main()

if __name__ == "__main__":
hello = HelloWorld()
hello.main()

Gracias por adelantado.
Un saludo.

Imagen de razaAztk
+1
0
-1

eh?

no entiendo muy bien tu problema..... el problema es que quieres ejecutar el programa python en segundo plano desde el script bash??????? para eso puedes usar el caracter & (ampersand)

mi_programa.py &

Ahora que si tu problema es bloquear toda la pantalla con tu ventana python, ponla siempre arriba (con la instrucción self.window.set_keep_above(True)) y en fullscreen (con self.window.fullscreen())

import pygtk
pygtk.require('2.0')
import gtk
import os

class HelloWorld:
	def __init__(self):
		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		self.window.set_keep_above(True) ##### ALWAYS ON TOP #####
		self.window.connect("destroy", self.destroy)
		self.window.set_border_width(10)
		self.button = gtk.Button("blabla")
		self.button.connect_object("clicked", gtk.Widget.destroy, self.window)
		self.window.add(self.button)
		self.button.show()
		self.window.show()
		#self.window.resize(250,150)
		self.window.fullscreen()   ##### FULLSCREEN #####
		
	def destroy(self, widget, data=None):
		os.system("uname -a")
		gtk.main_quit()
		
	def main(self):
		gtk.main()

if __name__ == '__main__':
	hello = HelloWorld()
	hello.main()

Saludos!

+1
0
-1

void hey(int x,int y)
{
if (x && y)
 printf("http://libertadhack.blogspot.com/");
else
 printf("http://libertadpunk.blogspot.com/");
}
Imagen de Alexnux
+1
0
-1

Exacto. Para ejecutar en segundo plano hay que añadir &.

Por otro lado, gracias por las dos líneas de código añadidas que permiten lanzar la pantalla al inicio de sesión y evitar que el usuario pueda manejar el escritorio, no solamente firefox.

+1
0
-1
Imagen de Alexnux
+1
0
-1

Aquí tenéis la solución definitiva.....

Al intentar lanzar una pantalla en el inicio de sesión -en mi caso usando un demonio, pero también por cualquier otro método-, como todavía no están cargadas las variables de entorno, entonces no detecta la pantalla. La solución es definir la variable de entorno DISPLAY.

De este modo, en el script -en este caso bash- que lanza el script python anterior, que a su vez lanza la ventana glade, debería exportarse la variable $DISPLAY con el valor conveniente.

FIN

+1
0
-1