python:X服务器上的致命IO错误11(资源暂时不可用):0.0

时间:2011-11-25 23:50:12

标签: python multithreading wxpython animated-gif

我正在尝试阅读一些图像(后来打算对它们执行某些任务),并且正在将图像读入内存。我想显示一个动画的'.gif'图片。为此我不得不使用Threads。现在它给出了错误:

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然后..

我已尝试删除link给出的joaquin中提到的〜/ .gconf / desktop / gnome / peripherals。它不起作用.. 我也试过'xhost +'。我从网上的某个地方找到了。仍然没有成功。

请告诉我们此代码中发生了什么......并提出解决方案 我正在使用ubuntu 10.04操作系统。 目录权限是:

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

Python verion的详细信息是: Python 2.6.5(r265:79063,2010年4月16日,13:09:56) linux2上的[GCC 4.4.3]

2 个答案:

答案 0 :(得分:2)

当你的图像位于脚本目录中时(我使用了我自己的动画gif和一个png),你的代码在win7中非常适合我使用wxpython 2.8.12.1和python 2.6.7在Spe版本0.8.4.i上运行。

除了wx之外,我需要的唯一更改是导入动画(from wx import animate)并使用

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

而不是

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

修改:有几种情况与herehere以及here有相同的错误消息。最后一个让我觉得它可能与在linux中使用带有gui框架的线程有关(see also here something related)。你应该谷歌错误字符串,以查看是否可以获得更多信息或在错误字符串作为主题的SO上询问特定问题。 UF!有already one

答案 1 :(得分:2)

不知道它是否与您的问题有关,但您应该在创建wxApp后实例化对话框并调用其ShowModal:

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 ==

我没有看到你从另一个线程中实例化了一个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)