2011-11-25 18 views
6

Estoy tratando de leer algunas imágenes (y luego tengo la intención de hacer algunas tareas sobre ellas), y mientras las imágenes se están leyendo en la memoria. Quiero mostrar una imagen animada '.gif'. Para ese propósito, tuve que usar Threads. Ahora se está dando error:python: Fatal IO error 11 (Recurso temporalmente no disponible) en el servidor X: 0.0

python: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0. 

Y algunas veces da error:

python: Fatal IO error 0 (Success) on X server :0.0. 

(Sí Mensaje de error cambia casi alternativamente) no tengo ni idea de por qué se produjo el error y cómo quitar eso.

import wx 
from wx import animate 
import thread 
import os 
class AniGif(wx.Dialog): 
    def __init__(self, parent, id, title): 
     wx.Dialog.__init__(self, parent, id, title, size=(300, 300)) 
     buttonOk = wx.Button(self, id=3, label="Ok", pos=(75, 50), size=(50, 50)) 
     self.Bind(wx.EVT_BUTTON, self.OnClick, id=3) 

    def OnClick(self, event) : 
     clock = "loading.gif" 
     showclock = wx.animate.GIFAnimationCtrl(self, -1, clock) 
     showclock.Play() 
     thread.start_new_thread(grabImages, ()) 

def grabImages(): 
    global dirim 
    dirim = {} 
    path = './images/soccer/' 
    listing = os.listdir(path) 
    for infile in listing: 
     if len(infile)>4 and infile[-4:]=='.jpg' : 
      print path+infile 
      dirim[infile]=wx.Bitmap(path+infile) 

app = wx.App() 
dia = AniGif(None, -1, "Ani Gif") 
dia.ShowModal() 
dia.Destroy() 
app.MainLoop() 

si reemplazo esta línea

dirim[infile]=wx.Bitmap(path+infile) 

con una línea ficticia:

dirim[infile]=infile 

Es un trabajo muy bien, sin error.

Y si puedo reemplazar esta línea

thread.start_new_thread(grabImages, ()) 

con algo como:

grabImages() 

Es un trabajo muy bien, sin error. El único problema que no puedo mostrar es el gif animado ...

He intentado eliminar ~/.gconf/desktop/gnome/peripherals como se menciona en el link dado por joaquin. No funciona ... y también probé 'xhost +'. Lo encontré de algún lado en la red. Todavía no hay éxito

Por favor, indique lo que está sucediendo en este código ... y sugiera una solución Estoy usando el sistema operativo Ubuntu 10.04. y el directorio permisos son:

drwxr-xr-x images 
drwxr-xr-x soccer 
detalle de

Python versión alemana son: Python 2.6.5 (R265: 79063 16 Abr 2010 13:09:56) [GCC 4.4.3] en linux2

+0

Esto viene unos años más tarde, pero me gustaría añadir que tenía el mismo error (pero con PySide) y, para mí, que estaba relacionado con la [esta cuestión] (http : //stackoverflow.com/questions/8649233/threading-it-is-not-safe-to-use-pixmaps-outside-the-gui-thread). Así que, básicamente, no puede llamar a las funciones de dibujo fuera del hilo principal, y es por eso que funcionó cuando reemplazó Bitmap con otra cosa. – iled

Respuesta

2

Tu código funciona perfecto para mí en win7 con wxpython 2.8.12.1 y python 2.6.7 ejecutando en Spe la versión 0.8.4.i cuando las imágenes están ubicadas en el directorio de scripts (utilicé mi propio gif animado y un png).

El único cambio que necesitaba era importar animado (from wx import animate) además de WX y utilizar

showclock = animate.GIFAnimationCtrl(self, -1, clock) 

en lugar de

showclock = wx.animate.GIFAnimationCtrl(self, -1, clock) 

Editar: Hay varios casos de personas que tienen la los mismos mensajes de error que los suyos como here y here y here. Esto último me hace pensar que podría estar relacionado con el uso de hilos con un framework gui en linux (see also here something related).Debes buscar en google la cadena de error para ver si puedes obtener más información o hacer una pregunta específica sobre SO con la cadena de error como tema. Uf! ¡hay already one!

+0

Los permisos del directorio son: drwxr-xr-x images drwxr-xr-x soccer No es un directorio o servidor protegido. importaciones son: wx importación, wx.animate importación hilo importación OS Yo estoy usando Ubuntu 10.04 – anshul410

+0

como por su sugerencia He editado el código: Da: NameError: nombre global 'animado' no está definido – anshul410

+0

desde wx import animate – joaquin

2

No sabe si está relacionado a su problema, pero se debe crear una instancia del diálogo y llamar a su ShowModal después de crear la wxApp:

class App(wx.App): 
    def OnInit(self): 
     dia = AniGif(None, -1, "Ani Gif") 
     try: 
      dia.ShowModal() 
     finally: 
      dia.Destroy() 
     return True 

App(0).MainLoop() 

== == editar

no lo hice veo que instanciaste un wx.Bitmap de otro hilo. Esto es malo. Tal vez puedas probar:

def grabImages(): 
    global dirim 
    dirim = {} 
    def addToDict(key, path): 
     dirim[key] = wx.Bitmap(path) 
    path = './images/soccer/' 
    listing = os.listdir(path) 
    for infile in listing: 
     if len(infile)>4 and infile[-4:]=='.jpg' : 
      print path+infile 
      wx.CallAfter(addToDict, infile, path+infile) 
+0

Todavía muestra los mismos dos errores: Fatal IO Error 0 Fatal IO Error 11 – anshul410

+0

@ anshul410 ¿Incluso con 'CallAfter'? Esto me solucionó un problema similar. –

Cuestiones relacionadas