Python3.7、PILを使用
PILを使ってPycarmで簡単な画像加工アプリを作成しているのですが、いくつかの機能が作動しません。原因は何でしょうか。
発生している問題・エラーメッセージ
ソースコードの中の「# それぞれのボタンを押すと変換操作する」のうち「if i == 1:」の画像の左右反転、「elif i == 3:」の画像のぼかしの機能が動作しません。
###該当のソースコード
python
1# 画像を読み込んでからボタンを押して画像を変換する 2from tkinter import * 3import tkinter.filedialog as tkfd 4import PIL.Image 5import PIL.ImageTk 6import PIL.ImageOps 7import PIL.ImageEnhance 8 9 10class App(Frame): 11 12 def quit(self, event): 13 self.master.destroy() 14 15 def open(self, event): 16 # ファイルダイアログ呼ぶ 17 filename = tkfd.askopenfilename() 18 19 # ファイルを選ぶ。画像以外を選ぶとコンソールに画像を選べと言ってくる 20 try: 21 img = PIL.Image.open(filename) 22 # 画像サイズは上下か左右のうち大きい方を500にする 23 img.thumbnail((500, 500)) 24 self.img = img 25 if img.mode == "1": # bitmap image 26 self.image1 = PIL.ImageTk.BitmapImage(img, foreground="white") 27 else: # photo image 28 self.image1 = PIL.ImageTk.PhotoImage(img) 29 self.la.config(image=self.image1, 30 width=self.image1.width(), height=self.image1.height()) 31 except: 32 print('画像を選べ') 33 34 def callback(self, i): 35 def x(): 36 # クリックされた時だけ作動する 37 try: 38 # 画像を選んだ状態に作動するそれ以外では何もしない 39 # それぞれのボタンを押すと変換操作する 40 if i == 0: 41 im = self.img.convert('L') 42 elif i == 1: 43 im = self.ImageOps.mirror(img) 44 elif i == 2: 45 im = self.img.point(lambda x: x * 1.5) 46 elif i == 3: 47 im = self.ImageEnhance.Sharpness(img) 48 im.enhance(0.0) 49 else: 50 im = self.img 51 self.image2 = PIL.ImageTk.PhotoImage(im) 52 self.la.config(image=self.image2, 53 width=self.image2.width(), height=self.image2.height()) 54 except: 55 pass 56 57 return x 58 59 def init(self): 60 ga = Label(self, text='下をクリックして画像を選ぶ!', width=30).grid(row=0, column=0) 61 self.image1 = PhotoImage() 62 la = self.la = Label(self, image=self.image1, bg="green", 63 width=500, height=50) 64 la.bind("<Button-1>", self.open) 65 la.bind("<Button-3>", self.quit) 66 la.grid(row=1, column=0) 67 68 buttons = [] 69 # 画像変換メニューをリストに入れておく 70 bt_name = ['白黒', '左右反転', '明るく','ピンぼけ修正','初期画像'] 71 for i in range(5): 72 # ボタンを作成して、リストの中の要素をテキストとして表示 73 buttons.append(Button(anchor=W, width=30, text=bt_name[i], command=self.callback(i))) 74 buttons[i].grid(row=i, column=0) 75 76 def __init__(self, master=None): 77 Frame.__init__(self, master) 78 self.master.title('画像変換アプリ') 79 self.init(); 80 self.grid() 81 82 83if __name__ == "__main__": 84 app = App() 85 app.mainloop()
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/05 05:34 編集
2019/09/05 05:03
2019/09/05 05:35