【Python/Tkinter】写真を点滅させる

Python/Tkinter】写真を点滅させる
f:id:Jikoryuu:20200119175545g:plain
PILをインストールする必要があります
PILで扱える画像の種類はbmptiff、gif、jpg、pngtiffppm、pgmです

PILがインストールされてない場合はpipでインストールしてください

>pip install Pillow

※参考URL

pythonGUIでオブジェクトを点滅させたい

https://teratail.com/questions/191769

PythonGUIに画像を表示する
https://water2litter.net/rum/post/python_tkinter_canvas_create_image/

円が動くアニメーションをつくるよ!after()でタイマーを作ろう!
https://python-channel.com/1370.html

ライブラリ:PIL
https://www.lifewithpython.com/2013/09/pil.html

 

import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
root.geometry('800x560')
root.title('IMG')

class Photo(object):
  root = None
  canvas = None
  # dt=点滅間隔[msec]
  def __init__(self,id,dt):
    self.id= str(id)
    self.state = 'normal'
    self.dt = dt
    Photo.root.after(self.dt, self.blink)
  def blink(self):
    if self.state == 'normal':
      self.state = 'hidden'
    else:
      self.state = 'normal'
  self.canvas.itemconfigure(self.id, state=self.state)
  self.root.after(self.dt, self.blink)

class Photo2(object):
  root = None
  canvas = None
  # dt=点滅間隔[msec]
  def __init__(self,id,dt):
    self.id= str(id)
    self.state = 'normal'
    self.dt = dt
    Photo2.root.after(self.dt, self.blink)
  def blink(self):
    if self.state == 'normal':
      self.state = 'hidden'
    else:
      self.state = 'normal'
    self.canvas.itemconfigure(self.id, state=self.state)
    self.root.after(self.dt, self.blink)

rimg1 = Image.open('picture.png')
img1 = ImageTk.PhotoImage(rimg1) # 表示するイメージを用意

canvas1 = tk.Canvas(
  root, # 親要素をメインウィンドウに設定
  #scrollregion=tk.W,
  width=rimg1.width-20, # 幅を設定
  height=rimg1.height-20, # 高さを設定
  relief=tk.RIDGE, # 枠線を表示
  borderwidth=10# 枠線の幅を設定
)
canvas1.create_image( # キャンバス上にイメージを配置
  0, # x座標
  0, # y座標
  image=img1, # 配置するイメージオブジェクトを指定
  tag="illust", # タグで引数を追加する。
  anchor=tk.NW # 配置の起点となる位置を左上隅に指定
)
canvas1.pack(fill = 'none', side = 'left')
Photo.root = root
Photo.canvas = canvas1
root.a1 = Photo(1,500)

rimg2 = Image.open('picture2.png')
img2 = ImageTk.PhotoImage(rimg2) # 表示するイメージを用意

canvas2 = tk.Canvas(
  root, # 親要素をメインウィンドウに設定
  width=rimg2.width-20, # 幅を設定
  height=rimg2.height-20, # 高さを設定
  relief=tk.RIDGE, # 枠線を表示
  borderwidth=10# 枠線の幅を設定
)
canvas2.create_image( # キャンバス上にイメージを配置
  0, # x座標
  0, # y座標
  image=img2, # 配置するイメージオブジェクトを指定
  tag="illust2", # タグで引数を追加する。
  anchor=tk.NW # 配置の起点となる位置を左上隅に指定
)
canvas2.pack(fill = 'none', side = 'left')
Photo2.root = root
Photo2.canvas = canvas2
Photo2(1,250)

root.mainloop()