![見出し画像](https://assets.st-note.com/production/uploads/images/68198158/rectangle_large_type_2_3ea1ffa512ce5daa8d3f5236a7a50d5d.png?width=800)
声でお知らせ。なんだけど…
スッキリするにはちょっと大変そう。
こんにちは!サキナオコです^ ^
今日も良いお天気。寒いです。
バタバタしていたらあっという間に日々が過ぎていきました。
いつもご覧いただき、スキ、フォロー、コメント、サポート、オススメまでも本当にほんとうにどうもありがとうございます*^o^*
今日投稿できましたのもそんなあなたのおかげです^o^/
さあ、タイマーの時間を音でお知らせしてみよう!といろいろ調べました。まず、ビープ音を出そうかと調べていたら、OSのシステムの声でもいけそうだということがわかりました。
ビープ音よりも声でのお知らせの方が気が利いています。
声はMacの場合、import os でos.system("say 'はーい。お時間でーす'") とすれば、簡単に喋ってくれます(*´艸`*)
早速新しい関数を作ってタイマー部分の関数へ取り入れました。
さあ、やってみますよ!
時間になり、「はーい。お時間でーす」そして、微妙に遅れてクリスマスカラーの「時間ですyo-!」ウィンドウが出ました*^o^*
えっと。これね、そうかぁ、順番に処理しているのでしょうか。
なんか気持ち悪いんです…時間差が。いや、慣れればいいのかな。
う〜ん、やっぱり慣れない!
同時に出したい!と思ったので、調べてみました。
ウィンドウと音を同時に…と調べてもなかなかヒットせず。
これかなぁと思ったのは並列処理とか平行処理とかいうもの。
並列処理のmultiprocessingとやらを使ってみようと思ったものの、簡単な例がなく利用法を理解できず。そもそも、この単純なコードには使うものではないかもしれないです。
とりあえず、声でお知らせしてくれるようになったので、今日はいいってことにします。
from time import sleep
import tkinter as tk
import os
# 最初の分数入力画面作成
minutein = tk.Tk() # 画面を出す
minutein.geometry('200x200+500+200')
minutein.title("Saki's Timer input window")
minutein.config(bg="green")
labell = tk.Label(minutein,text="Type the number of minutes. ")
labell.pack(ipady=20)
text = tk.Entry(minutein)
text.pack(expand = True)
inpmin = text.get()
# タイマー部分
def ok_cl():
s = text.get()
sleep(int(s)*60)
nwdw()
voi()
# お知らせウィンドウ
def nwdw():
root = tk.Tk()
root.geometry('300x300+500+200')
root.title("Saki's Timer")
root.config(bg = "green")
root.attributes("-topmost", True) # 最前面に出す
label = tk.Label(
root,
font = ("system",30),
fg = "white",
text='時間ですyo-!',
bg = "red"
)
label.place(
x = 50,
y = 100,
)
# お知らせボイス
def voi():
os.system("say 'はーい。お時間でーす'")
okButton = tk.Button(minutein,text='OK', command=ok_cl,fg="red")
okButton.pack(ipadx = 15, ipady = 15)
minutein.mainloop()
りおんさんのスレッド追加+windowsで声が出るバージョン↓
from time import sleep
import tkinter as tk
import os
import threading
import platform
# 最初の分数入力画面作成
minutein = tk.Tk() # 画面を出す
minutein.geometry('200x200+500+200')
minutein.title("Saki's Timer input window")
minutein.config(bg="green")
labell = tk.Label(minutein, text="Type the number of minutes. ")
labell.pack(ipady=20)
text = tk.Entry(minutein)
text.pack(expand=True)
inpmin = text.get()
# タイマー部分
def ok_cl():
s = text.get()
sleep(int(s)*60)
thread_1 = threading.Thread(target=nwdw)
thread_2 = threading.Thread(target=voi)
# スレッド開始
thread_1.start()
thread_2.start()
# スレッドの終了を待つ
thread_1.join()
thread_2.join()
# スレッドが終了したら実行される
print("タイマーが終了したよ")
# お知らせウィンドウ
def nwdw():
root = tk.Tk()
root.geometry('300x300+500+200')
root.title("Saki's Timer")
root.config(bg="green")
root.attributes("-topmost", True) # 最前面に出す
label = tk.Label(
root,
font=("system", 30),
fg="white",
text='時間ですyo-!',
bg="red"
)
label.place(
x=50,
y=100,
)
# お知らせボイス
def voi():
if platform.system() == "Windows":
from win32com.client import Dispatch
speak = Dispatch("SAPI.SpVoice")
speak.Speak('はーい。お時間でーす')
else:
os.system("say 'はーい。お時間でーす'")
okButton = tk.Button(minutein, text='OK', command=ok_cl, fg="red")
okButton.pack(ipadx=15, ipady=15)
minutein.mainloop()
この記事が気に入ったらサポートをしてみませんか?