tkinterをやってみよう
pythonにいくつかあるGUIライブラリの中で一番手軽に扱えそうなtkinterをいじってみた。本当はkivyとかやりたかったがうまくインストールできなかった、、、
雛形
root = tkinter.Tk() root.mainloop()
ボタンやラベルなど一通りのものは貼れる。
イベントを登録するにはbind()を使う。例えばボタンに登録するには
button.bind("<1>",method)
methodが実行されてほしい関数。<1>は左クリックが押された時にという意味で、他にも<2>だと右クリックで実行されたりとバリエーションがある。注意点としてmethodの引数にeventを指定する。buttonの定義時にcommandで指定するやり方もあるらしいがbindの方が拡張性が高い?
canvasを登録すれば図形描画もできる。
canvas = tkinter.Canvas(self,bg="white", height=750, width=500) canvas.create_line(100, 100, 200, 200, fill='blue') #線 canvas.create_polygon(150, 150, 500, 20, 200, 40, fill="red") #多角形 canvas.pack()
模索して作ったサンプルファイル
import tkinter from tkinter import filedialog as tkFileDialog from PIL import Image, ImageTk class Application(tkinter.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.button1 = tkinter.Button(self,text="select") self.button1.pack() self.button1.bind("<1>",self.photoselect) self.leftC = tkinter.Canvas(self,bg="white", height=750, width=500) self.leftC.pack(side="left") self.rightC = tkinter.Canvas(self,bg="white", height=750, width=500) self.rightC.create_line(100, 100, 200, 200, fill='blue') self.rightC.create_polygon(150, 150, 500, 20, 200, 40, fill="red") self.rightC.pack(side="right") def photoselect(self,event): filename=tkFileDialog.askopenfilename() self.img = Image.open(filename) self.image = self.photoresize(self.img) self.img = ImageTk.PhotoImage(self.image) self.leftC.create_image( 0, 0, image = self.img, anchor = tkinter.NW ) #画像の縦横比で縮尺のサイズを変える def photoresize(self,img): w,h=img.size if w/h>=500/750: return img.resize((500,int(h*500/w))) else: return img.resize((int(h*750/h),750)) if __name__ == "__main__": root = tkinter.Tk() root.geometry("1000x800") app = Application(master=root) app.mainloop()
間違いございましたらお願いします。