0

ボタンを押すとmirror関数が呼び出さflipれ、Gui に img が表示されるように、Gui に関数を実装する必要があります。/
に挿入された画像が B&W img であるとします。 確認したところ正常に動作しますが、 で結合しようとするとうまくいきません。 私は何が欠けていますか?mirrorflip
flipGui

def flip(im):
    '''Flips a picutre horizontally, and returns a new image that is a mirror view of the original'''
    org=Image.open(im)
    new=Image.new("L",org.size)   
    for x in range(org.size[0]):
        for y in range(org.size[1]):
            pixel=org.getpixel((x,y))
            new.putpixel((org.size[0]-x-1,y),pixel)
    return new

def mirror():
    '''Flips the image like a mirror does, left to right'''
    global img
    out = Image.new('L',img.size, 'white')
    out=flip(img)
    img = out  
    display() 

def display():
    delete()
    global img
    global photo
    photo = ImageTk.PhotoImage(img)
    canvas.create_image(250, 250, image=photo)
    canvas.pack()

### GUI packing ###
g = Gui()    
g.title('PhotoPy 0.2')
global img
### canvas
canvas=g.ca(500, 500, bg='white')

### menu 
g.row(weights=[1,0,0,0])
filename = g.en(text='python.bmp', width=16)
g.bu(text='...', command=browse)
g.bu(text='Save', command=save)
g.bu(text='Load', command=load)
g.bu(text='Mirror', command=mirror)
g.endrow() 
### start
g.mainloop()

次のエラー メッセージが表示されます。

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  ... line 87, in mirror
    out=flip(img)
  ... line 24, in flip
    org=Image.open(im)
  ... line 1956, in open
    prefix = fp.read(16)
  ... in __getattr__
    raise AttributeError(name)
AttributeError: read
4

1 に答える 1

1

が であると仮定するImagepil.Imageopen関数はファイル名またはファイル オブジェクトを引数として期待します。あなたのコードimgでは、おそらくNoneどこにも設定していません。

別の注意点として、本当に必要かどうかわからない場合は、画像にグローバル変数を使用したり、一般的にグローバル変数を使用したりしないでください。画像を属性として持つクラスにコードをリファクタリングします。また、とにかくin でのみ使用するためphoto、グローバル in として宣言displayすることは単に不必要です。display

于 2013-01-08T12:32:38.930 に答える