百人一首学習アプリ ー Ⅲ

前の書き込みは少し長いので、稿を改めて書きます。

 

まず二つの単独のプログラムを構築します。 それからその二つを一つのプログラムに統一します。

1.jpg画像を乱数で切り替える
2.mp3音源を切り替える
3.乱数で、jpg画像とmp3音源が同時に切り替わる

と言う順序でやります。

——————————————

① jpg画像を乱数に応じて切り替える

import tkinter as tk
from PIL import Image, ImageTk 
import random

root = tk.Tk()
# タイトル
root.title(‘img切り替え’)

# ウインドウサイズ
root.geometry(‘400×400’)

#音源のあるパスを指定、乱数に応じたjpgをpickupする
def select_img_path():
    ran = random.randrange(1, 11)
    photo_path =’./100_jpg/’ + str(ran)+’.jpg’ #jpgのあるパスを指定
    print(photo_path) #確認用
    return photo_path #いつもこれを忘れるので注意

#Nextと表示のあるボタン1で、乱数でpickupしたjpgをパネル上にのラベルに格納する
def push_next_button(event):
    img_next = ImageTk.PhotoImage(Image.open(select_img_path()))
    panel.configure(image = img_next)
    panel.photo = img_next #この1行がなぜか必要だった。

#ボタン1でラベルに置いたjpgを表示させる
img = ImageTk.PhotoImage(Image.open(select_img_path()))
panel = tk.Label(root,image = img)
panel.pack(side = “bottom”, fill = “both”, expand = “yes”)
panel.place(x=5,y=5)

#ボタン1が押されたら、”push_next_button”のcommand先へ飛んでいく
btn1=tk.Button(root,text=’Next’)
btn1.place(x=130,y=350)
btn1.bind(“<1>”, push_next_button)

root.mainloop()

**********************
from PIL import Image, ImageTk 
 
いろいろテストしたけどこのライブラリーがベストでした。
 兎に角動いたのでこれから動作処理の理由を勉強します。

・ボタン1を押してから、あっちこっちで処理をやらせてますね。
 この辺の理解がまだまだで、いまも試行錯誤の連続です。

兎に角これで「
jpg画像を乱数で切り替える」処理が出来ました。



② jpgとmp3が入りました

——————————–

#ボタンでjpg,mp3(完成、歌と同期はしていない).py @6/1/2019

from mutagen.mp3 import MP3 as mp3
import pygame
import time
import tkinter as tk
import random
from PIL import Image, ImageTk

root = tk.Tk()
root.geometry(‘400×400’)
root.title(‘クマさんの百人一首’)

#ボタン「次へ」が押されたときの画像処理
def select_img_file():
    global ran
    ran = random.randrange(1, 11)
    #jpg_file = ‘./100_jpg/’ + str(ran)+’.jpg’
    #mp3_file = ‘./100_mp3/’ + str(ran)+’.mp3′
    #print(jpeg_file, mp3_file)

    photo_file =  ‘./100_jpg/’ + str(ran)+’.jpg’
    print(‘photo_path =’, photo_file)
    
    return photo_file

def push_next_button(event):
    img_next = ImageTk.PhotoImage(Image.open(select_img_file()))
    panel.configure(image = img_next)
    panel.photo = img_next
    print(ran)

img = ImageTk.PhotoImage(Image.open(select_img_file()))
panel = tk.Label(root,image = img)
panel.pack(side = “bottom”, fill = “both”, expand = “yes”)
panel.place(x=5,y=5)

btn1=tk.Button(root, text=’次へ’)
btn1.place(x=50,y=330)
btn1.bind(“<1>”, push_next_button)
    
#ボタン「読上げる」が押されたときの処理
def select_mp3_file():
    #ran = random.randrange(1, 11)
    mp3_file =’./100_mp3/’ + str(ran)+’.mp3′
    print(‘mp3_file= ‘, mp3_file)

    pygame.mixer.init()
    pygame.mixer.music.load(mp3_file) #音源を読み込み
    mp3_length = mp3(mp3_file).info.length #音源の長さ取得
    pygame.mixer.music.play(1) #再生開始。1の部分を変えるとn回再生(その場合は次の行の秒数も×nすること)
    #time.sleep(mp3_length + 0.25) #再生開始後、音源の長さだけ待つ(0.25待つのは誤差解消)
    #pygame.mixer.music.stop() #音源の長さ待ったら再生停止

btn2 = tk.Button(root, text=’読上げる’, command = select_mp3_file)
btn2.place(x=100, y=330)

#ボタン「音声止める」が押されたときの処理
def stop_sound():
    pygame.mixer.init()
    pygame.mixer.fadeout(100)#mS 動作せず
    pygame.mixer.music.stop()
    
btn3 = tk.Button(root, text=’音声止める’, command = stop_sound)
btn3.place(x=180, y=330)

#ボタン「終わる」が押されたときの処理
def destroy():
    pygame.mixer.music.stop()
    global root
    root.destroy()
    
btn4 = tk.Button(root, text=’終わる’, command = destroy)
btn4.place(x=280, y=330) #音声止らない

root.mainloop()

 

————————–

jpg表示とmp3読み上げは、それぞれのボタンで出来たけれど百人一首の歌とはまだ同期しない。

 

これから百人一首の表示とjpg、mp3を同期させるcodeを考えます。 多少やりましたが
全く同期しない。 ここはネットかどこかで専門家にお尋ねしないと無理かもしれません。

 

続く

 

 

Python別館
百人一首学習アプリ ー 完成編

一つの乱数を他の関数ででも使えるようにしましたので、全て欲しい処理が可能になりました。 ・まず最初に …

Python別館
百人一首学習アプリ ー Ⅱ

① 歌の表示は完成前回までで取り合えずGUIで乱数に応じた百人一首が表示されるようになりました。更に …

Python別館
百人一首学習アプリ ー Ⅰ

お正月に備えて「百人一首学習アプリ」を作ろうと思います。どんな構成にするかまだ未定ですが、なにか書き …