世界で一番簡単な写真帳 (完)

❶ たった6行で出来る世界で一番簡単な写真帳を作りました。

 画像表示はMS Edgeを使います。 基本的な処理だけなので、表示後はEdgeは
 纏めて閉じて下さい。

使い方:

・PCへ適当な名前でこのcodeをコピペする (今回はganref.py)
・ganref photoと云うholderを作り、そこへ好きなjpegまたはpng画像を
 保管する
・MSのVS codeなどで、ganref.pyを開く(ctrl+F5)

するとganref photoに入っている画像が1秒間隔くらいで自動表示されます。

 

1from PIL import Image 
2  
3import os 
4fnames = os.listdir('ganref photo') 
5  
6for fname in fnames: 
7    img = Image.open(os.path.join('ganref photo', fname)) 
8    img.show() 

 

こんな画像が自動表示されます。

 

 

 

 

 

 

 

 

 

 

 

 

❷ GUIで簡単な写真帳を作ります。

手順:
・画像用ホルダー(Photo)を作る。
・必要なライブラリーをimportする。行1~5
・画像表示用GUIをcodeする。行8~10
・画像holder名をgetし、画像が何個あるか調べる。行13,14
・画像path読込関数を作る。 行16~19
・Nextボタンで次の画像を表示する関数を作る。 行22~27
・Nextボタンを設置する。行30~32 表示関数はこれより以前に設定必要
・スタート時に画像をまず表示するcodeを書く。 行35~42
・プログラム終了用の関数、ボタンを書く。 行45~51
・mainloop()でプログラムを回して処理するお呪い。行54

プログラムは上から(code)順に実行されますので、順序を間違うとエラーになります。

1import os 
2from pathlib import Path 
3from PIL import Image, ImageTk 
4import tkinter as tk 
5import random 
6  
7  
8root = tk.Tk() 
9root.geometry("450x600") 
10root.title("Ganref Photo Book") 
11  
12  
13fnames = os.listdir('photo') 
14number = len(fnames) 
15  
16def select_img_file(): 
17    ran = random.randint(0, number - 1) 
18    photo_file = os.path.join('photo', fnames[ran]) 
19    return photo_file 
20  
21  
22def push_next_button(event):  
23    img_next = Image.open(select_img_file()) 
24    img_next.thumbnail((400, 400)) 
25    img = ImageTk.PhotoImage(img_next) 
26    label_1.configure(image=img) 
27    label_1.photo = img 
28  
29  
30button_1 = tk.Button(root, width=10, text="Next", bg="light blue") 
31button_1.bind("<1>", push_next_button) 
32button_1.place(x=60, y=480) 
33  
34  
35# 最初に一回だけ画像を表示する 
36img = Image.open('./photo/' + fnames[2]) 
37img.thumbnail((400, 400)) 
38img = ImageTk.PhotoImage(img) 
39label_1 = tk.Label(root, image=img) 
40label=tk.Label(root).pack() #画像を一段下げる 
41label_1.pack() # 画像が常にGUIのセンターに来る 
42label_1.photo = img 
43  
44  
45def destroy(): 
46    root.destroy() 
47  
48  
49button_2 = tk.Button(root, text="終了", width=10, 
50                     bg="light blue", command=destroy) 
51button_2.place(x=280, y=480) 
52  
53  
54root.mainloop() 
   
   

上手く動作すればこのようになります。 nextで次の画像に変わります。

 

 

 

Python別館
文字列の配置

ラベル、テキストボックスなどで、文字列の配置が微妙に異なります。いつも迷うので基本的なものを挙げてお …

Python別館
Python別館 目次

Pythonで作成したアプリ関連の記事は「Python別館」に、widgetやその使用方法・それを使 …

Python別館
csvファイルの呼び込み

普段は文字列にコンマ(,)が入ったtxtファイルでのアプリが多いのですが、今回はコンマ区切りのcsv …