python: фатальная ошибка ввода-вывода 11 (ресурс временно недоступен) на X-сервере: 0.0 - PullRequest
7 голосов
/ 26 ноября 2011

Я пытаюсь прочитать некоторые Изображения (и позже намереваюсь выполнить над ними какую-то задачу), и пока Изображения читаются в память. Я хочу отобразить анимированное изображение «.gif». Для этого мне пришлось использовать темы. Сейчас выдает ошибку:

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

А иногда выдает ошибку:

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

(Да Сообщение об ошибке меняется почти попеременно) Я понятия не имею, почему произошла эта ошибка и как ее устранить.

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

если я заменю эту строку

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

с фиктивной линией:

dirim[infile]=infile

Работает нормально, без ошибок.

И если я заменю эту строку

thread.start_new_thread(grabImages, ( ))

с чем-то вроде:

grabImages()

Работает нормально, без ошибок. Единственная проблема, я не могу отобразить анимированный GIF, то ..

Я попытался удалить ~ / .gconf / desktop / gnome / Периферийные устройства, как указано в ссылке , заданной joaquin . Это не работает .. и я также попробовал «xhost +». Я нашел откуда-то в сети. По-прежнему безуспешно.

Пожалуйста, расскажите, что происходит в этом коде .. и предложите решение Я использую ОС Ubuntu 10.04. И права доступа к каталогу:

drwxr-xr-x images
drwxr-xr-x soccer

Детали Python verion: Python 2.6.5 (r265: 79063, 16 апреля 2010, 13:09:56) [GCC 4.4.3] на linux2

Ответы [ 2 ]

2 голосов
/ 26 ноября 2011

Не знаю, связано ли это с вашей проблемой, но вы должны создать диалоговое окно и вызвать его ShowModal после создания 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()

== edit ==

Iне видел, как вы создали экземпляр wx.Bitmap из другого потока.Это плохо.Попробуйте вместо этого:

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)
2 голосов
/ 26 ноября 2011

Ваш код отлично работает для меня в win7 с wxpython 2.8.12.1 и python 2.6.7 под управлением Spe версии 0.8.4.i, когда изображения находятся в каталоге скриптов (я использовал свой собственный анимированный gif и png),

Единственное, что мне было нужно, это импортировать animate (from wx import animate) в дополнение к wx и использовать

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

вместо

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

Редактировать: Есть несколько случаев, когда у людей были те же сообщения об ошибках, что и у вас, например здесь и здесь и здесь .Этот последний заставляет меня думать, что это может быть связано с использованием потоков с графическим интерфейсом в Linux ( см. Также здесь кое-что связанное ).Вы должны погуглить строку ошибки, чтобы увидеть, можете ли вы получить дополнительную информацию или задать конкретный вопрос о SO со строкой ошибки в качестве темы.Уф! уже есть один !

...