method化したtkinter

import tkinter as tk
import tkinter.messagebox as tmsg

import random


def main():
    global a
    a = mk_a()
    mk_window()
    root.mainloop()


def mk_a():
    # global a
    # random.seed(0)
    a = [
        random.randint(0, 9),
        random.randint(0, 9),
        random.randint(0, 9),
        random.randint(0, 9),
    ]
    print(a)
    return a

    # print(str(a[0])+str(a[1])+str(a[2])+str(a[3]))


def mk_window():
    global root, rirekibox, label1, editbox1, button1
    root = tk.Tk()
    root.geometry("600x800")
    root.title("数あてゲーム")
    root.bind("<Return>", ButtonClick)

    rirekibox = tk.Text(root, font=(("Helvetica", 14)))
    rirekibox.place(x=400, y=0, width=200, height=800)

    label1 = tk.Label(root, text="数を入力してね", font=("Helvetica", 14))
    label1.place(x=20, y=20)

    editbox1 = tk.Entry(width=4, font=("Helvetica", 28))
    editbox1.place(x=120, y=60)
    editbox1.focus_set()

    button1 = tk.Button(
        root, text="チェック", font=("Helvetica", 14), command=ButtonClick
    )
    button1.place(x=220, y=60)


def get_number():
    b = editbox1.get()
    isok = False
    while isok == False:
        # b = input("数を入れてね>")
        if len(b) != 4:
            tmsg.showerror("エラー", "4桁の数字をいれてね")
            return
        else:
            kazuok = True
            for i in range(4):
                if (b[i] < "0") or (b[i] > "9"):
                    tmsg.showerror("b[" + str(i) + "]は数字ではありません.")
                    kazuok = False
                    return
                else:
                    isok = True
    return b


def check_hit_and_blow(a, b):

    hit = 0
    for i in range(4):
        if a[i] == int(b[i]):
            hit = hit + 1

    blow = 0
    for j in range(4):
        for i in range(4):
            if (int(b[j]) == a[i]) and (int(b[i]) != a[i]) and (int(b[j]) != a[j]):
                blow = blow + 1
                break

    rirekibox.insert(tk.END, b + " h:" + str(hit) + "b:" + str(blow) + "\n")
    return hit


def ButtonClick(event=None):
    global hit, blow, isok

    b = get_number()
    hit = check_hit_and_blow(a, b)

    if hit == 4:
        tmsg.showinfo("あたり", "おめでとうさん.あたりでっせ.")
        #    print("当たり")
        root.destroy()


main()

Author: Shigeto R. Nishitani

Created: 2026-06-08 Mon 12:32

Validate