LoginSignup
1
1

More than 5 years have passed since last update.

tkinterでfizzbuzzを判定するGUIを作ってみた

Posted at

キャプチャ.JPG

コード

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に渡します。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1