見出し画像

声でお知らせ。なんだけど…

スッキリするにはちょっと大変そう。

こんにちは!サキナオコです^ ^
今日も良いお天気。寒いです。
バタバタしていたらあっという間に日々が過ぎていきました。

いつもご覧いただき、スキ、フォロー、コメント、サポート、オススメまでも本当にほんとうにどうもありがとうございます*^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()

この記事が気に入ったらサポートをしてみませんか?