Pythonで音声時計を作りました
2018年2月に、NVDAトレーニング講座が開催されます。
1泊2日の講座で、2日目は2グループに分かれます。
そのうちの1グループは、NVDAでPythonプログラム講習です。
wxpythonというGUIモジュールを使用し、音声時計を作るところまで決まっています。
実際に講座で使用されるプログラムは、他の人が作成した、もっと洗練された物になると思いますが、プログラミング初心者の自分が、「wxpythonのGUIのボタンを押すと、時間を調べて、時間を案内するwav音声が再生される」という設計から、Webを調べたり、ツイッターなどでわからないところをつぶやいて他の人が教えてくれたりなどして、プログラムを作りました。
環境構築の方法など、いくつかこつがありますので、また別の時に書ければと思います。
ググりながら、これで出来るかな、といろいろ試し、動いた物を見つけて、自分で正解として持っています。
意外と短い文章が、いろんな動作に対応している、ということを感じていただけたら良いなと思います。
GUIは、下記のサイトのコードから、必要な要素(アプリ、フレーム、パネル、ボタン2個)を拾い出して表示して使っています。
Python-izm Pythonの入門から応用までをサポートする学習サイト
https://www.python-izm.com/
環境
Windows10
NVDA
Python2.7
wxpython
使用モジュール
time (標準)
datetime (標準)
wx (wxpython)
wx.adv (wxpython)
ソースコード (※視覚障害の方には、スペースインデントは嫌がられるのですが、note上に記載する際に、タブインデントが入れられなかったため、やむを得ずスペースインデントです)
import wx
import wx.adv
import datetime
from time import sleep
def click_button_1(event):
today1=datetime.datetime.today()
hour1=today1.hour
minute1=today1.minute
print(hour1)
print(minute1)
if hour1<10:
filename1="0.wav"
filename2=str(hour1)+".wav"
elif hour1<20:
filename1="10.wav"
ji1=hour1-10
filename2=str(ji1)+".wav"
else:
filename1="20.wav"
ji1=hour1-20
filename2=str(ji1)+".wav"
filename3="ji.wav"
if minute1<10:
filename4="0.wav"
filename5=str(minute1)+".wav"
elif minute1<20:
filename4="10.wav"
hun1=minute1-10
filename5=str(hun1)+".wav"
elif minute1<30:
filename4="20.wav"
hun1=minute1-20
filename5=str(hun1)+".wav"
elif minute1<40:
filename4="30.wav"
hun1=minute1-30
filename5=str(hun1)+".wav"
elif minute1<50:
filename4="40.wav"
hun1=minute1-40
filename5=str(hun1)+".wav"
else:
filename4="50.wav"
hun1=minute1-50
filename5=str(hun1)+"wav"
filename6="hun.wav"
print(filename1)
print(filename2)
print(filename3)
print(filename4)
print(filename5)
print(filename6)
wx.adv.Sound(filename1).Play()
sleep(0.5)
wx.adv.Sound(filename2).Play()
sleep(0.5)
wx.adv.Sound(filename3).Play()
sleep(0.5)
wx.adv.Sound(filename4).Play()
sleep(0.5)
wx.adv.Sound(filename5).Play()
sleep(0.5)
wx.adv.Sound(filename6).Play()
def click_button_2(event):
pass
application = wx.App()
frame = wx.Frame(None, wx.ID_ANY, '音声時計', size=(300, 200))
panel = wx.Panel(frame, wx.ID_ANY)
button_1 = wx.Button(panel, wx.ID_ANY, '現在時刻案内')
button_2 = wx.Button(panel, wx.ID_ANY, '音声時計終了')
button_1.Bind(wx.EVT_BUTTON, click_button_1)
button_2.Bind(wx.EVT_BUTTON, click_button_2)
layout = wx.GridSizer(rows=2, cols=2, gap=(0, 0))
layout.Add(button_1, 0, wx.GROW)
layout.Add(button_2, 0, wx.GROW)
panel.SetSizer(layout)
frame.Show()
application.MainLoop()
この記事が気に入ったらサポートをしてみませんか?