tkinter로 fizzbuzz를 결정하는 GUI를 만들어 보았습니다.



코드



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("", lambda event:fizzbuzz(Entry1.get()))에서,
Enter 키를 누르면 입력한 값을 fizzbuzz 함수가 수신하도록 설정합니다.
주 : 반각의 <>라고 왠지 이 사라져 버리므로 전각으로 쳤습니다.
#リストボックス
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 에 건네줍니다.

좋은 웹페이지 즐겨찾기