【第7回PYTHON講座】誕生日を入力して星座を判断するGUIブログラムを作ろう②

スポンサーリンク
PYTHON

前回はライブラリ「Tkinter」でGUIを作成し、LabelEntryで文字の表示と入力欄の作成を行いました。

【第6回PYTHON講座】誕生日を入力して星座を判断するGUIブログラムを作ろう①
前回は『生年月日を入力して年齢と星座を表示させるプログラム』を作成しました。生年月日をコマンドプロンプトで入力していましたが、今回はGUIで誕生日を入力して星座を判断するプログラムを作成します。...

今回はプログラムを起動させるためのボタンの作成などをして完成させましょう。

では始めましょう!

スポンサーリンク

ボタンの作成

誕生日を入力した後に実行させる為のボタンとプログラムを終了させるためのボタンを作成します。先ず、プログラムを終了させるのボタンを作成します。

clsbtn = tk.Button(canvas, 
                   text="終了", padx=10, pady=5, 
                   fg="red", 
                   command=quit).place(x=70, y=170)

textにはボタンに表示されるの文字列を記述します。プログラムを終了させるボタンなので、『終了』ですね。padxpadyでボタンの大きさを決めます。fqは文字列の色です。HTMLの色のコードでも構いません。commandには、ボタンをクリックした際の関数を示します。quitはプログラムを終了させる共通のコマンドになります。placeでボタンの配置を決めます。下記の通り、終了ボタンが作成されました。

Tkinter – ボタンの作成

星座を表示させる関数の作成して完成

では、星座を表示させる関数部の作成をします。

zodiac = [
    ["山羊座", 12, 22], 
    ["水瓶座", 1, 20], 
    ["魚座", 2, 19], 
    ["牡羊座", 3, 21], 
    ["牡牛座", 4, 20], 
    ["双子座", 5, 21], 
    ["蟹座", 6, 22], 
    ["獅子座", 7, 23], 
    ["乙女座", 8, 23], 
    ["天秤座", 9, 23], 
    ["蠍座", 10, 24], 
    ["射手座", 11, 23]
    ]
var = tk.StringVar()
def command1():
 
    for i in range(len(zodiac)):
        if zodiac[i][1] == int(Entry1.get()):
            if zodiac[i][2] <= int(Entry2.get()):
                var.set(f"{zodiac[i][0]}です")
                break
            else:
                var.set(f"{zodiac[i-1][0]}です")
                break
    lbl3 = tk.Label(textvariable=var)
    lbl3.place(x=50, y=250)
    return 0
cmdbtn = tk.Button(canvas,
                   text="確認",padx=10, pady=5, 
                   command=command1).place(x=10, y=170)

1行目:zoiacで星座の名前と星座を判別する為の開始の日付の配列を作ります。

16行目:後ほど説明します。

18行目:関数command1()を定義します。ウインドウに入力欄Entry1の文字列を取得するには、Engry1.get()をします。

23行目にフォーマット関数fを使用しています。これを使用すると文字の連結などをしなくても済むので便利です。

16行目と29行目:今回の注目して欲しい所です。16行目にtk.StringVar()という変数型の文字列を作成しています。ここに星座の結果を入れます。そして29行目にはLabelの文字列はtextを使っていましたが、textvariableを使っています。このセットは、Label文字列を更新する場合に用います。

Labelの文字列を更新する場合、textを使っても文字列は変更されるますが、次に文字列を変えた時に、以前の文字列がウインドウ上に残ってしまいます。

例えば、最初の文字列を”おはようございます”として、次に”おやすみ”と文字列の短いものにすると、文字の領域がリフレッシュされずに下記のように表示されます。これを防ぐためにtextvariableを使うことになります。

33行目:星座を確認する関数を呼び出すボタンを作成します。commandには先ほど定義した関数command1を指定します。

これでプログラムが完成しました!!

プログラム完成

プログラム コード

すべてのプログラムコードです。

import tkinter as tk
root = tk.Tk()
root.title('星座診断')
canvas = tk.Canvas(root, height=300, width=250,bg="#FFFFFF")
canvas.pack()
lbl = tk.Label(text='誕生日を入力して下さい', bg="#FFFFFF")
lbl.place(x=10, y=10)
lbl = tk.Label(text='月', bg="#FFFFFF")
lbl.place(x=10, y=30)
lbl = tk.Label(text='日', bg="#FFFFFF")
lbl.place(x=10, y=100)
lbl2 = tk.Label(text='貴方の星座は' , bg="#FFFFFF")
lbl2.place(x=10, y=220)
Entry1= tk.Entry(width=20, bg="#EEEEEE")
Entry1.place(x=10, y=70)
Entry2= tk.Entry(width=20, bg="#EEEEEE")
Entry2.place(x=10, y=130)
zodiac = [
    ["山羊座", 12, 22], 
    ["水瓶座", 1, 20], 
    ["魚座", 2, 19], 
    ["牡羊座", 3, 21], 
    ["牡牛座", 4, 20], 
    ["双子座", 5, 21], 
    ["蟹座", 6, 22], 
    ["獅子座", 7, 23], 
    ["乙女座", 8, 23], 
    ["天秤座", 9, 23], 
    ["蠍座", 10, 24], 
    ["射手座", 11, 23]
    ]
var = tk.StringVar()
def command1():
 
    for i in range(len(zodiac)):
        if zodiac[i][1] == int(Entry1.get()):
            if zodiac[i][2] <= int(Entry2.get()):
                #var.set(f"{zodiac[i][0]}です")
                result = f"{zodiac[i][0]}です"
                break
            else:
                #var.set(f"{zodiac[i-1][0]}です")
                result = f"{zodiac[i-1][0]}です"
                break
    #lbl3 = tk.Label(textvariable=var)
    lbl3 = tk.Label(text=result)
    lbl3.place(x=50, y=250)
    return 0
cmdbtn = tk.Button(canvas,
                   text="確認",padx=10, pady=5, 
                   command=command1).place(x=10, y=170)
clsbtn = tk.Button(canvas, 
                   text="終了", padx=10, pady=5, 
                   fg="red", 
                   command=quit).place(x=70, y=170)
root.mainloop()

まとめ

GUIのプログラムは目に見えるプログラムということでワクワクしてきますね。次は、音声を使用したプログラムに挑戦したいと思います。楽しみにしていてください。

コメント

Social Media Auto Publish Powered By : XYZScripts.com
タイトルとURLをコピーしました