2014-04-22 157 views
1

我新,您好所以社區NameError全局名稱 'ImageDraw' 沒有定義

我用枕頭和devoloping(Tkinter的,BmpImagePlugin,cStringIO,子,CTYPE S,再... n)的模塊

我使用這種方式時,如果這種情況告訴我AttributeError的

from PIL import * 

我解決這個代碼符合嘗試 - 除了

try: 
    from PIL import * 
except AttributeError: #module has no attribute ImageN 
    import Image 
    import ImageDraw 
    import ImageFont 

我的原單碼部分

class capsGen(object): 
    def __init__(self): 
     pass 

    def videoGen(self,path): 
     iv = InputVideoStream() 
     iv.open(path) 
     self.videoHead(path) 
     print self.topDuration 
     frameDiff = list(enumerate(iv.readframe())) #bmp -> [io][1] 
     self.totalFrame = frameDiff[-1][0] 
     #16 imgs 
     self.genImgs = [] 
     curImg = 0 
     while True: 
      if curImg < 16: 
       self.genImgs.append(randint(1,self.totalFrame)) 
       curImg = curImg + 1 
      else: 
       break 


     try: 
      src = PIL.Image.open("src.png") 
      ciz = PIL.ImageDraw.draw(src) 
      ft = PIL.ImageFont.truetype("arial.ttf",32) 
      ciz.text((190,15),self.fileName,font=ft) #fileName 
      src.save("1.png") 


      #print frameDiff[5][0] 
      for i in self.genImgs: 
       imj = PIL.Image.open(StringIO.StringIO(frameDiff[i][1])) #base io -> [capsNo][1] 
       imj.save("%s.png"%i) 
     except NameError: 
      src = Image.open("src.png") 
      ciz = ImageDraw.draw(src) 
      ft = ImageFont.truetype("arial.ttf",32) 
      ciz.text((190,15),self.fileName,font=ft) #fileName 
      src.save("1.png") 


      #print frameDiff[5][0] 
      for i in self.genImgs: 
       imj = Image.open(StringIO.StringIO(frameDiff[i][1])) #base -> [io][1] 
       imj.save("%s.png"%i) 

我的錯誤,

Traceback (most recent call last): 
    File "o.py", line 275, in (module) 
    run = capsGen() 
    File "o.py", line 42, in __init__ 
    self.videoGen() #for developers 
    File "o.py", line 157, in videoGen 
    ciz = ImageDraw.draw(src) 
NameError: global name 'ImageDraw' is not defined 

但我裝枕頭模塊和I創造進口PIL或Image..N模塊空Python文件的工作。它不只是工作在my_project(o.py)

比你感興趣。 好作品。

回答

2

你對我們說「Tkinter」模塊。 如果你是導入Tkinter的模塊這個喜歡

from Tkinter import * 

Generaly,這就像使用程序員。 而使用PIL模塊,我們必須知道每個模塊的類名因爲它的衝突。

Tkinter在Image模塊中,PIL在Image模塊中。兩個.open屬性幾乎相同。

解決,

import Tkinter as tk 

如果您正在使用枕頭或沒有,我給你的建議,使用這個像

from PIL import Image, ImageDraw, ImageFont 

最後,你應該字符串名稱來引用,例如,

class tryAgain(object): 
    def __init__(self): 
     self.referenceName = "Hell" + "o" 

    def run(self): 
     img = Image.open(self.referenceName) 
     #this like 
相關問題