サンプルコード集 (Tkinter)

トップページ>サンプルコード集 (Tkinter)

サンプルコード集

◯こちらのサンプルコードは指導等にご自由にお使いください。


【サンプルコードの使い方】
◯サンプルコードを写す時はコピペをしないようにしましょう。
◯▶を押すと出力が表示されます。
◯Geminiボタンを押すとGemini(AI)による解説が表示されます。間違っていることもあるので、疑問に思った場合はご質問ください。


【要素ごとのサンプルコードページへ移動】
全て
if文
for文
関数
配列
ファイル入出力
Numpy
Matplotlib
openpyxl
Pandas
正規表現
Biopython
scikit-learn
seaborn
Graphviz
Gemini
Tkinter

【Code List】

CODE: g-1 (Tkinter)

CODE: g-2 (Tkinter)



CODE: g-1 (Tkinter)


import tkinter as tk


def tk_label_0(frame, text):
    fg = "black"
    bg = "white"
    font = ("MSゴシック", 12)
    return(tk.Label(frame, text=text, fg=fg, bg=bg, font=font))


def tk_entry_0(frame):
    fg = "black"
    bg = "white"
    font = ("MSゴシック", 12)
    return(tk.Entry(frame, fg=fg, bg=bg, font=font))


def tk_button_0(frame, text):
    fg = "black"
    bg = "white"
    font = ("MSゴシック", 12)
    return(tk.Button(frame, text=text, fg=fg, bg=bg, font=font))


def main():
    root = tk.Tk()
    root.title("Sample")
    root.geometry("400x300")
    root.config(bg="white")

    id_label = tk_label_0(root, "ID")
    id_label.grid(row=0, column=0, padx=10, pady=10)

    id_entry = tk_entry_0(root)
    id_entry.grid(row=0, column=1, padx=10, pady=10)

    pass_label = tk_label_0(root, "Password")
    pass_label.grid(row=1, column=0, padx=10, pady=10)

    pass_entry = tk_entry_0(root)
    pass_entry.grid(row=1, column=1, padx=10, pady=10)

    login_button = tk_button_0(root, "Login")
    login_button.grid(row=2, column=0, padx=10, pady=10)

    root.mainloop()
    return(0)


main()





【ポイント】
◯毎回fg, bg, fontを指定するのが面倒なので、ラッパー関数を作ると便利。
◯要素が多くなってくると変数名に混乱が起きやすくなるため、変数の命名を統一しよう。今回のサンプルコードのように命名するとわかりやすい。
◯要素の指定はpack(), grid(), place()があるが、まずはgrid()をマスターしよう。
◯grid()はエクセルと同じような感覚で要素を位置を指定できる。
◯padx, padyは「その行・列自体の空白を作る」イメージ。他の要素にも影響が及ぶところに注意!!
面倒ではあるが、今回のように全て一様に設定しておいたほうがわかりやすくはある。
◯参考: https://youta-blog.com/tkinter-grid/#grid_rowconfigure-grid_columnconfigure




CODE: g-2 (Tkinter)


import tkinter as tk


def tk_label_0(frame, text):
    fg = "black"
    bg = "white"
    font = ("MSゴシック", 12)
    return(tk.Label(frame, text=text, fg=fg, bg=bg, font=font))


def tk_entry_0(frame):
    fg = "black"
    bg = "white"
    font = ("MSゴシック", 12)
    return(tk.Entry(frame, fg=fg, bg=bg, font=font))


def tk_button_0(frame, text, command):  # commandを新たに追加
    fg = "black"
    bg = "white"
    font = ("MSゴシック", 12)
    return(tk.Button(frame, text=text, command=command, fg=fg, bg=bg, font=font))


# ---------------------------------------------------------
# ログインボタンクリック時の動作
# ---------------------------------------------------------

def click_login_button(frame, id0, pass0):
    frame.destroy()     # ログイン画面は閉じる

    root = tk.Tk()      # 新たにウィンドウ作成
    root.title("Login result")
    root.geometry("400x300")
    root.config(bg="white")

    id_label = tk_label_0(root, "ID")
    id_label.grid(row=0, column=0, padx=10, pady=10)

    id_label_2 = tk_label_0(root, id0)
    id_label_2.grid(row=0, column=1)

    pass_label = tk_label_0(root, "Password")
    pass_label.grid(row=1, column=0, pady=10)

    pass_label_2 = tk_label_0(root, pass0)
    pass_label_2.grid(row=1, column=1)

    root.mainloop()

    return(0)


def main():
    root = tk.Tk()
    root.title("Login")
    root.geometry("400x300")
    root.config(bg="white")

    id_label = tk_label_0(root, "ID")
    id_label.grid(row=0, column=0, padx=10, pady=10)

    id_entry = tk_entry_0(root)
    id_entry.grid(row=0, column=1)

    pass_label = tk_label_0(root, "Password")
    pass_label.grid(row=1, column=0, pady=10)

    pass_entry = tk_entry_0(root)
    pass_entry.grid(row=1, column=1)

    login_button = tk_button_0(root, "Login", lambda:click_login_button(root, id_entry.get(), pass_entry.get()))
    login_button.grid(row=2, column=0, pady=10)

    root.mainloop()
    return(0)


main()




【ポイント】
◯一つの関数で一つのウィンドウ(画面)と考えるとわかりやすい。
◯buttonが押されたときの動作はcommandにて関数で定義する。lambda:がついているのは、こういうものだと思っておけばOK。
◯Entryの値の取得はget()にて行う。
◯「次のウィンドウに何の値を渡すか」を考えて関数を作成する。(今回はIDとPass)
◯参考1: https://www.earthlink.co.jp/engineerblog/technology-engineerblog/7744/
◯参考2: https://www.school.ctc-g.co.jp/columns/hishinuma/hishinuma23.html