質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6559閲覧

tkinterとpillowを用いて、ボタンを押す事によりウィンドウに貼り付けている画像を回転させたい。

grsn

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/03 14:40

前提・実現したいこと

初の質問を投稿させていただきます。
将来的にPythonで画像を編集出来るソフトを作成し個人で使用したいと思い、数日前からPythonを触り始めました。

実装したい基本の動作すらままならないのでご教示いただきたいです。
例になりますが実装したい機能としましては、ボタンをクリックするとウィンドウに表示されている画像が90度回転する。

ボタンをクリックして、イベントの発生まではサイトを参考にしながら実装出来ましたが、どうしても画像を90度回転させるのが私ではうまく実装出来ません。
キャンバスの画像を更新する方法なども、教えていただきたい所存です。
どなたかご教示頂けると幸いです。

該当のソースコード

Python

1import tkinter as tk 2from PIL import Image, ImageTk 3 4class App(tk.Tk): 5 def __init__(self): 6 super(App, self).__init__() 7 self.title("テストウィンドウ") 8 self.geometry("640x480+1000+10") 9 10 self.create_widgets() 11 self.Bind() 12 13 def create_widgets(self): 14 #キャンバスの設定 15 self.canvas = tk.Canvas(self, width = 300, height = 300) 16 17 #画像の貼り付け 18 img = Image.open('IMG/sample.png', 'r') 19 self.img = ImageTk.PhotoImage(img) 20 self.canvas.place(x = 245, y = 100) 21 self.canvas.create_image(0, 0, image = self.img) 22 self.testBtn = tk.Button(self, text="右に回転") 23 self.testBtn.pack(anchor = tk.NW, side="top") 24 25 def callback(self): 26 #ここで回転の処理を行いたい 27 28 def Bind(self): 29 #テスト作成中 30 self.testBtn.bind("<1>", self.callback) 31 32 def run(self): 33 self.mainloop() 34 35if __name__ == "__main__": 36 app = App() 37 app.run() 38

試したこと

imgの変数等をグローバル等、素人が思いつきそうな事はすべて行いましたが実装出来ませんでした。

補足情報

Pythonは3.6.5になります。
tkinterとPillowはどちらも最新のはずです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

画像の回転を行いたい時はPillow rotate というキーワードで検索してみてくださいな。

Python, Pillowで画像を回転するrotate

Python

1import tkinter as tk 2from PIL import Image, ImageTk 3 4 5class App(tk.Tk): 6 def __init__(self): 7 super(App, self).__init__() 8 self.title("テストウィンドウ") 9 self.geometry("640x480+1000+10") 10 11 self.create_widgets() 12 self.Bind() 13 14 def create_widgets(self): 15 #キャンバスの設定 16 self.canvas = tk.Canvas(self, width = 300, height = 300) 17 18 #画像の貼り付け 19 self.img = Image.open('IMG/sample.png', 'r') 20 self.rotate(0) 21 self.canvas.place(x = 245, y = 100) 22 23 self.testBtn = tk.Button(self, text="右に回転") 24 self.testBtn.pack(anchor = tk.NW, side="top") 25 26 def rotate(self, degrees:int): 27 self.img = self.img.rotate(degrees, expand=True) 28 self.photo = ImageTk.PhotoImage(self.img) 29 self.canvas.create_image(0, 0, image=self.photo) 30 31 def callback(self, evt): 32 # ここで回転の処理を行いたい 33 self.rotate(-90) 34 35 def Bind(self): 36 #テスト作成中 37 self.testBtn.bind("<1>", self.callback) 38 39 def run(self): 40 self.mainloop() 41 42if __name__ == "__main__": 43 app = App() 44 app.run()

◇参考情報
PIL/Pillow チートシート

投稿2018/07/03 14:57

編集2018/07/03 19:47
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grsn

2018/07/04 12:28

早速動かさせていただきました! まさしく理想の動きです! 画像をself.imgにわたすのは別の関数にしたほうがいいんですね~! 色々と参考になるコードありがとうございます! 引き続き作成続けたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問