新着情報

1 -1. 画像表示GUIプログラム(showGUIimage.py)

(1) 画像表示GUIプログラム(showGUIimage.py)

 このPythonプログラムは計算機内の任意の場所に格納してある画像ファイルをファイル(F) プルダウンメニュー・開く(O)により対話的に選択し、”Original Image”として枠サイズ(縦500画素, 横500画素)のWindow内の指定場所に、画像サイズ (縦300画素, 横300画素)で縮小表示するサンプルプログラムである。

*****************************************************************************

プログラム showGUIimage.py をコメントを付けて以下に示す。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 12 10:44:33 2019

@author: PBK-****
"""
from tkinter import *
from tkinter import filedialog,messagebox
from PIL import Image, ImageTk
import cv2

class Window(Frame):
    def __init__(self,master=None):#クラス Windowの
                  #コンスト ラクタ
        #フレーム
        Frame.__init__(self,master) #上位クラス 
                              #Frame Widgetのコンストラクタ
        self.master.title('画像表示')#クラス 
                                     #Window のタイトル
        self.master.minsize(500,500)#クラス 
                                    #Window の窓枠サイズ  
                                    #(横500画素、縦500画素)

        #メニューバー
        self.menu_bar = Menu(self.master)
        self.master.config(menu=self.menu_bar)
        self.menu_file = Menu(self.menu_bar,tearoff = 0)
 
        self.menu_file.add_command(label='開く­', command=self.open, underline=3, accelerator = 'Ctrl-O')
        self.menu_file.add_command(label='保存', command=self.save, underline=5, accelerator = 'Ctrl-S')
        self.menu_file.add_command(label='終了', command=self.quit, underline=5, accelerator = 'Ctrl-Q')
        self.menu_bar.add_cascade(label='ファイル(F)', menu=self.menu_file,  underline=5)

        self.image1 = PhotoImage()

        #ラベル1
        self.la = Label(self,image=self.image1,bg="#44aaaa",width=300, height=300)
        self.la.pack(side=LEFT,padx=100, pady=100)

    #開く
    def open(self):
          global filename
          global size
          size=300,300
          filename = filedialog.askopenfilename()
          if filename != "":
            im = Image.open(filename)
            im.thumbnail(size, Image.ANTIALIAS)#画像サイズ
                                               #を縮小する
            print(im.mode)
          if im.mode == '1': # bitmap imageの場合
            self.image1 = ImageTk.BitmapImage(im, foreground="white")
          else:              # photo image .png,.jpgなどの
                             # 拡張子の場合
            self.image1 = ImageTk.PhotoImage(im)
          self.la.config(text='Original Image',image=self.image1,
                         width=self.image1.width(), height=self.image1.height(),compound='top')

    #保存
    def save(self):
        global filename
        global filename2

        cv2.imwrite('result.jpg',filename2)

    #終了
    def quit(self):
       if messagebox.askokcancel('Closing Confirmation', 'Are you sure you want to close?'):
         self.master.destroy()       

if __name__ == '__main__':
    root = Window()
    root.pack()
    root.mainloop()

コメント投稿フォーム

メールアドレスが公開されることはありません。 が付いている欄は必須項目です