2011-11-25 12 views
6

मैं कुछ छवियों को पढ़ने की कोशिश कर रहा हूं (और बाद में उन पर कुछ कार्य करने का इरादा रखता हूं), और जबकि छवियों को स्मृति में पढ़ा जा रहा है। मैं एक एनिमेटेड '.gif' छवि प्रदर्शित करना चाहता हूं। उस उद्देश्य के लिए मुझे थ्रेड का उपयोग करना पड़ा। अब यह दे रहा है त्रुटि:पायथन: एक्स सर्वर पर घातक आईओ त्रुटि 11 (संसाधन अस्थायी रूप से अनुपलब्ध): 0.0

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 को प्रदर्शित करने में सक्षम नहीं हूं ..

मैंने में joaquin द्वारा उल्लिखित ~/.gconf/डेस्कटॉप/gnome/peripherals को हटाने का प्रयास किया है। यह काम नहीं करता .. और मैंने 'xhost +' भी कोशिश की। मैं नेट पर कहीं से मिला। अभी भी कोई सफलता नहीं है।

कृपया बताएं कि इस कोड में क्या हो रहा है .. और एक समाधान का सुझाव दें मैं उबंटू 10.04 ओएस का उपयोग कर रहा हूं। और निर्देशिका अनुमतियाँ हैं:

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

अजगर verion के विस्तार कर रहे हैं: अजगर 2.6.5 (r265: 79,063, अप्रैल 16, 2010, 13:09:56) [जीसीसी 4.4.3] linux2 पर

+0

यह कुछ साल बाद आता है, लेकिन मैं जोड़ने के लिए है कि मैं एक ही त्रुटि थी चाहते हैं (लेकिन PySide के साथ) और, मेरे लिए, यह [इस सवाल] से संबंधित था (http : //stackoverflow.com/questions/8649233/threading-it-is-not-safe-to-use-pixmaps-outside-the-gui-thread)। तो मूल रूप से आप मुख्य धागे के बाहर ड्रॉ फ़ंक्शंस को कॉल नहीं कर सकते हैं, और यही वजह है कि जब आपने बिटमैप को किसी और चीज़ से बदल दिया तो यह काम करता था। – iled

उत्तर

2

आपका कोड w7python 2.8.12.1 के साथ win7 में मेरे लिए सही काम करता है और स्क्रिप्ट संस्करण 0.8.4.i पर चलने वाले पायथन 2.6.7 जब छवियां स्क्रिप्ट निर्देशिका में स्थित होती हैं (मैंने अपना स्वयं का एनिमेटेड gif और एक png का उपयोग किया)।

केवल परिवर्तन मैं जरूरत wx के अलावा चेतन (from wx import animate) आयात करने के लिए और प्रयोग था

showclock = animate.GIFAnimationCtrl(self, -1, clock) 
बजाय

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

संपादित करें: लोगों के होने के कई मामलों रहे हैं here और here और here जैसे आपकी त्रुटि त्रुटियों के रूप में। यह आखिरी व्यक्ति मुझे लगता है कि यह लिनक्स (see also here something related) में एक गुई ढांचे के साथ धागे के उपयोग से संबंधित हो सकता है।यह देखने के लिए कि क्या आप कुछ और जानकारी प्राप्त कर सकते हैं या विषय के रूप में त्रुटि स्ट्रिंग के साथ SO पर एक विशिष्ट प्रश्न पूछ सकते हैं, आपको त्रुटि स्ट्रिंग को Google करना चाहिए। UF! already one है!

+0

निर्देशिका अनुमतियां हैं: drwxr-xr-x छवियाँ drwxr-xr-x सॉकर यह एक संरक्षित निर्देशिका या सर्वर नहीं है। आयात कर रहे हैं: आयात wx, wx.animate आयात धागा आयात ओएस मैं ubuntu उपयोग कर रहा हूँ 10.04 – anshul410

+0

अपने सुझाव के अनुसार मैं कोड को संपादित किया है: यह देता है: NameError: वैश्विक नाम 'चेतन' – anshul410

+0

परिभाषित नहीं किया गया है wx आयात एनिमेट – joaquin

2

पता नहीं है अगर यह आपकी समस्या से संबंधित है, लेकिन आप संवाद का दृष्टांत और उसके 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() 

== संपादित ==

मैंने नहीं किया आप एक 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) 
+0

यह अभी भी दो त्रुटियों को दिखाता है: घातक आईओ त्रुटि 0 घातक आईओ त्रुटि 11 – anshul410

+0

@ anshul410 यहां तक ​​कि 'CallAfter' के साथ भी? यह मेरे लिए एक समान समस्या तय की। –

संबंधित मुद्दे