我正在尝试阅读一些图像(后来打算对它们执行某些任务),并且正在将图像读入内存。我想显示一个动画的'.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]
答案 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)
修改:有几种情况与here和here以及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)