コード
tkfizzbuzz.py
!/usr/bin/env python
-*- coding: utf-8 -*-
from tkinter import *
from tkinter import ttk
root = Tk()
root.title(u'Fizz Buzz')
# FizzBuzzを判定する関数
def fizzbuzz(n):
fzbz = "Fizz Buzz"
fz = "Fizz"
bz = "Buzz"
try:
n = int(n)
except ValueError:
return Entry1.delete(0, END)
if n % 15 == 0:
resltfizbuz(fzbz)
elif n % 3 == 0:
resltfizbuz(fz)
elif n % 5 == 0:
resltfizbuz(bz)
else:
resltfizbuz(n)
Entry1.delete(0,END)
# 判定結果をリストボックスに書き込む
def resltfizbuz(reslt):
Listbox1.insert(END,reslt)
Listbox1.yview_scroll(5, UNITS)
# フレーム
frame = Frame(root,width=30)
frame.grid()
# エントリー
Entry1 = Entry(frame, width=30)
Entry1.bind("<Return>", lambda event:fizzbuzz(Entry1.get()))
Entry1.grid(row=0)
# リストボックス
Listbox1 = Listbox(frame, width=30)
Listbox1.grid(row=1, column=0)
# スクロールバー
Scroll = ttk.Scrollbar(frame, orient=VERTICAL, command=Listbox1.yview)
Listbox1['yscrollcommand'] = Scroll.set
Scroll.grid(row=1, column=1, sticky=(N,S))
# ボタン
Button1 = Button(frame,text=u'FizzBuzz',command=lambda: fizzbuzz(Entry1.get()))
Button1.grid(row=2)
root.mainloop()
コードの説明
# FizzBuzzを判定する関数
def fizzbuzz(n):
fzbz = "Fizz Buzz"
fz = "Fizz"
bz = "Buzz"
try:
n = int(n)
except ValueError:
return Entry1.delete(0, END)
if n % 15 == 0:
resltfizbuz(fzbz)
elif n % 3 == 0:
resltfizbuz(fz)
elif n % 5 == 0:
resltfizbuz(bz)
else:
resltfizbuz(n)
Entry1.delete(0,END)
数字を入力するとfizzbuzzを判定し、3の倍数ならfizz、5の倍数ならbuzz、15の倍数ならfizzbuzz、それ以外の数字はそのまま返します。
int以外は消します。
# 判定結果をリストボックスに書き込む
def resltfizbuz(reslt):
Listbox1.insert(END,reslt)
Listbox1.yview_scroll(5, UNITS)
fizzbuzzの結果をリストボックスに挿入します。
リストボックスの高さ以上に結果が挿入された場合、スクロールが面倒なのでyview_scrollで下にスクロールさせます。
# エントリー
Entry1 = Entry(frame, width=30)
Entry1.bind("<Return>", lambda event:fizzbuzz(Entry1.get()))
Entry1.grid(row=0)
数字を入れるエントリーを一番上に作ります。
Entry1.bind("<Return>", lambda event:fizzbuzz(Entry1.get()))で、
エンターキーを押すと、入力した値をfizzbuzz関数が受け取るように設定します。
注:半角の<>だとなぜか<Return>が消えてしまうので全角で打ちました。
# リストボックス
Listbox1 = Listbox(frame, width=30)
Listbox1.grid(row=1, column=0)
fizzbuzzの判定結果を出力するリストボックスです。
# スクロールバー
Scroll = ttk.Scrollbar(frame, orient=VERTICAL, command=Listbox1.yview)
Listbox1['yscrollcommand'] = Scroll.set
Scroll.grid(row=1, column=1, sticky=(N,S))
リストボックスに縦のスクロールバーを設定します。
sticky=(N,S)でリストボックスと同じ高さにスクロールバーを引き延ばします。
# ボタン
Button1 = Button(frame,text=u'FizzBuzz',command=lambda: fizzbuzz(Entry1.get()))
Button1.grid(row=2)
エントリーの値をget()で受け取りfizzbuzzに渡します。