[Python] ボタンを電卓のように配列してみる

こんにちは、@yasuです。

ボタンを電卓のように配列してみたいと思います。電卓機能は実装していません。

1. 初期版

電卓のボタンの配列をgridで実現する。

コード

from tkinter import *

root = Tk()
root.title("電卓っぽいもの")

#
# 電卓のボタンの配列をgridで実現する。
#
# [0,0] [1,0] [2,0] [3,0]
# [0,1] [1,1] [2,1] [3,1]
# [0,2] [1,2] [2,2] [3,2]
#
def Test1():

    btn_f16 = Button(root, text="F16")
    btn_f17 = Button(root, text="F17")
    btn_f18 = Button(root, text="F18")
    btn_f19 = Button(root, text="F19")

    btn_f16.grid(row=0,column=0)
    btn_f17.grid(row=0,column=1)
    btn_f18.grid(row=0,column=2)
    btn_f19.grid(row=0,column=3)

    btn_clear = Button(root, text="cler")
    btn_equal = Button(root, text="=")
    btn_div = Button(root, text="/")
    btn_mul = Button(root, text="*")

    btn_clear.grid(row=1,column=0)
    btn_equal.grid(row=1,column=1)
    btn_div.grid(row=1,column=2)
    btn_mul.grid(row=1,column=3)

    btn_7 = Button(root, text="7")
    btn_8 = Button(root, text="8")
    btn_9 = Button(root, text="9")
    btn_sub = Button(root, text="-")

    btn_7.grid(row=2,column=0)
    btn_8.grid(row=2,column=1)
    btn_9.grid(row=2,column=2)
    btn_sub.grid(row=2,column=3)

    btn_4 = Button(root, text="4")
    btn_5 = Button(root, text="5")
    btn_6 = Button(root, text="6")
    btn_add = Button(root, text="+")

    btn_4.grid(row=3,column=0)
    btn_5.grid(row=3,column=1)
    btn_6.grid(row=3,column=2)
    btn_add.grid(row=3,column=3)

    btn_1 = Button(root, text="1")
    btn_2 = Button(root, text="2")
    btn_3 = Button(root, text="3")
    btn_enter = Button(root, text="enter")

    btn_1.grid(row=4,column=0)
    btn_2.grid(row=4,column=1)
    btn_3.grid(row=4,column=2)
    btn_enter.grid(row=4,column=3,rowspan=2)

    btn_0 = Button(root, text="0")
    btn_point = Button(root, text=".")

    btn_0.grid(row=5,column=0,columnspan=2)
    btn_point.grid(row=5,column=2)

Test1()
root.mainloop()

実行結果

image.png

2. 途中版

stickyを用いて、配列にボタンの大きさをそろえる。

コード

from tkinter import *

root = Tk()
root.title("電卓っぽいもの")

#
# stickyを用いて、配列にボタンの大きさをそろえる。
#
def Test2():

    btn_f16 = Button(root, text="F16")
    btn_f17 = Button(root, text="F17")
    btn_f18 = Button(root, text="F18")
    btn_f19 = Button(root, text="F19")

    btn_f16.grid(row=0,column=0,sticky=N+E+W+S)
    btn_f17.grid(row=0,column=1,sticky=N+E+W+S)
    btn_f18.grid(row=0,column=2,sticky=N+E+W+S)
    btn_f19.grid(row=0,column=3,sticky=N+E+W+S)

    btn_clear = Button(root, text="cler")
    btn_equal = Button(root, text="=")
    btn_div = Button(root, text="/")
    btn_mul = Button(root, text="*")

    btn_clear.grid(row=1,column=0,sticky=N+E+W+S)
    btn_equal.grid(row=1,column=1,sticky=N+E+W+S)
    btn_div.grid(row=1,column=2,sticky=N+E+W+S)
    btn_mul.grid(row=1,column=3,sticky=N+E+W+S)

    btn_7 = Button(root, text="7")
    btn_8 = Button(root, text="8")
    btn_9 = Button(root, text="9")
    btn_sub = Button(root, text="-")

    btn_7.grid(row=2,column=0,sticky=N+E+W+S)
    btn_8.grid(row=2,column=1,sticky=N+E+W+S)
    btn_9.grid(row=2,column=2,sticky=N+E+W+S)
    btn_sub.grid(row=2,column=3,sticky=N+E+W+S)

    btn_4 = Button(root, text="4")
    btn_5 = Button(root, text="5")
    btn_6 = Button(root, text="6")
    btn_add = Button(root, text="+")

    btn_4.grid(row=3,column=0,sticky=N+E+W+S)
    btn_5.grid(row=3,column=1,sticky=N+E+W+S)
    btn_6.grid(row=3,column=2,sticky=N+E+W+S)
    btn_add.grid(row=3,column=3,sticky=N+E+W+S)

    btn_1 = Button(root, text="1")
    btn_2 = Button(root, text="2")
    btn_3 = Button(root, text="3")
    btn_enter = Button(root, text="enter")

    btn_1.grid(row=4,column=0,sticky=N+E+W+S)
    btn_2.grid(row=4,column=1,sticky=N+E+W+S)
    btn_3.grid(row=4,column=2,sticky=N+E+W+S)
    btn_enter.grid(row=4,column=3,rowspan=2,sticky=N+E+W+S)

    btn_0 = Button(root, text="0")
    btn_point = Button(root, text=".")

    btn_0.grid(row=5,column=0,columnspan=2,sticky=N+E+W+S)
    btn_point.grid(row=5,column=2,sticky=N+E+W+S)

Test2()
root.mainloop()

実行結果

image.png

3. 完成版

padx,padyを用いて、ボタン間の隙間を広げる。

コード

from tkinter import *

root = Tk()
root.title("電卓っぽいもの")

#
# padx,padyを用いて、ボタン間の隙間を広げる。
#
def Test3():

    btn_f16 = Button(root, text="F16",width=5,height=2)
    btn_f17 = Button(root, text="F17",width=5,height=2)
    btn_f18 = Button(root, text="F18",width=5,height=2)
    btn_f19 = Button(root, text="F19",width=5,height=2)

    btn_f16.grid(row=0,column=0,sticky=N+E+W+S,padx=3,pady=3)
    btn_f17.grid(row=0,column=1,sticky=N+E+W+S,padx=3,pady=3)
    btn_f18.grid(row=0,column=2,sticky=N+E+W+S,padx=3,pady=3)
    btn_f19.grid(row=0,column=3,sticky=N+E+W+S,padx=3,pady=3)

    btn_clear = Button(root, text="cler",width=5,height=2)
    btn_equal = Button(root, text="=",width=5,height=2)
    btn_div = Button(root, text="/",width=5,height=2)
    btn_mul = Button(root, text="*",width=5,height=2)

    btn_clear.grid(row=1,column=0,sticky=N+E+W+S,padx=3,pady=3)
    btn_equal.grid(row=1,column=1,sticky=N+E+W+S,padx=3,pady=3)
    btn_div.grid(row=1,column=2,sticky=N+E+W+S,padx=3,pady=3)
    btn_mul.grid(row=1,column=3,sticky=N+E+W+S,padx=3,pady=3)

    btn_7 = Button(root, text="7",width=5,height=2)
    btn_8 = Button(root, text="8",width=5,height=2)
    btn_9 = Button(root, text="9",width=5,height=2)
    btn_sub = Button(root, text="-",width=5,height=2)

    btn_7.grid(row=2,column=0,sticky=N+E+W+S,padx=3,pady=3)
    btn_8.grid(row=2,column=1,sticky=N+E+W+S,padx=3,pady=3)
    btn_9.grid(row=2,column=2,sticky=N+E+W+S,padx=3,pady=3)
    btn_sub.grid(row=2,column=3,sticky=N+E+W+S,padx=3,pady=3)

    btn_4 = Button(root, text="4",width=5,height=2)
    btn_5 = Button(root, text="5",width=5,height=2)
    btn_6 = Button(root, text="6",width=5,height=2)
    btn_add = Button(root, text="+",width=5,height=2)

    btn_4.grid(row=3,column=0,sticky=N+E+W+S,padx=3,pady=3)
    btn_5.grid(row=3,column=1,sticky=N+E+W+S,padx=3,pady=3)
    btn_6.grid(row=3,column=2,sticky=N+E+W+S,padx=3,pady=3)
    btn_add.grid(row=3,column=3,sticky=N+E+W+S,padx=3,pady=3)

    btn_1 = Button(root, text="1",width=5,height=2)
    btn_2 = Button(root, text="2",width=5,height=2)
    btn_3 = Button(root, text="3",width=5,height=2)
    btn_enter = Button(root, text="enter",width=5,height=2)

    btn_1.grid(row=4,column=0,sticky=N+E+W+S,padx=3,pady=3)
    btn_2.grid(row=4,column=1,sticky=N+E+W+S,padx=3,pady=3)
    btn_3.grid(row=4,column=2,sticky=N+E+W+S,padx=3,pady=3)
    btn_enter.grid(row=4,column=3,rowspan=2,sticky=N+E+W+S,padx=3,pady=3)

    btn_0 = Button(root, text="0",width=5,height=2)
    btn_point = Button(root, text=".",width=5,height=2)

    btn_0.grid(row=5,column=0,columnspan=2,sticky=N+E+W+S,padx=3,pady=3)
    btn_point.grid(row=5,column=2,sticky=N+E+W+S,padx=3,pady=3)

Test3()
root.mainloop()

実行結果

image.png

Sort:  

@yasu transfered 0.5 KRWP to @krwp.burn. voting percent : 6.71%, voting power : 60.36%, steem power : 1929484.10, STU KRW : 1200.
@yasu staking status : 250 KRWP
@yasu limit for KRWP voting service : 0.5 KRWP (rate : 0.002)
What you sent : 0.5 KRWP [47391557 - 697ebcd03bd64ac2703f9a72a34704a3fd5be8ae]

Coin Marketplace

STEEM 0.12
TRX 0.34
JST 0.032
BTC 109663.03
ETH 4018.66
USDT 1.00
SBD 0.75