🐱

PySimpleGUIでじゃんけんアプリをGUI化してみた

2021/07/02に公開

PySimpleGUIでじゃんけんアプリをイチから作ります

Python初学者が、最初のころに作るものといえば、じゃんけんゲームがあると思います。
それを、PySimpleGUIを使ってGUI化してみよう!という内容です。
中身的には、じゃんけんアプリの中身が50行、GUI化の記述が50行といった感じです。
以下、使用するライブラリです。

PySimpleGUI

アプリをGUI化するために使用
レイアウトをPythonリストで記述するため、まさにSimple!!
PySimpleGUIってなんだ?という方はこちらの記事もどうぞ
https://zenn.dev/monaka37/articles/583c1fa0fa913b

numpy

CPUのじゃんけんの手を決める時にランダム整数を生成するため

Pyinstaller

アプリをデスクトップアプリ化するため

成果物

完成イメージはこちら

上で、グー、チョキ、パーをラジオボタンから選択して、対戦ボタンをクリックすると、CPUの手、自分の手、対戦結果が表示されるというごくごく簡単なもの
たった100行程度で記述されているんですが、PySimpleGUIを使う上で必要な要素がたくさん入っていて、PySimpleGUI初学者にとってうってつけと思います。

動画では、まずじゃんけんゲームの実装をイチから行い、その後でGUI化するための手直しをする様子を紹介しているので、ぜひ一度見ていってください。
きっと、あなたもPythonのGUI化ができるようになります!

YouTube 解説動画

https://www.youtube.com/watch?v=aaqeFMXTVX8

最終コード

手っ取り早く、中身を見たい方用
じゃんけんゲームの実装はもっとスマートに書けそうですね...

import numpy as np
import PySimpleGUI as sg

def judgement(your_num, cpu_num):

    if your_num == 0:
        if cpu_num == 0:
            # print("あいこです")
            result ="あいこです"
        elif cpu_num == 1:
            result ="あなたの勝ちです"
        elif cpu_num == 2:
            result ="あなたの負けです"

    if your_num == 1:
        if cpu_num == 1:
            result ="あいこです"
        elif cpu_num == 2:
            result ="あなたの勝ちです"
        elif cpu_num == 0:
            result ="あなたの負けです"

    if your_num == 2:
        if cpu_num == 2:
            result ="あいこです"
        elif cpu_num == 0:
            result ="あなたの勝ちです"
        elif cpu_num == 1:
            result ="あなたの負けです"

    return result

font = ("meiryo", 16)
size = (10,2)
size_result = (20,2)

layout = [

    [sg.Radio("グー", font=font, size=size, group_id = "choice", key="gu"),
     sg.Radio("チョキ", font=font, size=size, group_id = "choice", key="choki"),
     sg.Radio("パー", font=font, size=size, group_id = "choice", key="pa")],

    [sg.Button("対戦", font=font, size=size, key="judge")],
    [sg.Text("CPU:", font=font, size=size), sg.Text("", size=size_result,  font=font, key = "CPU")],
    [sg.Text("あなた:", font=font, size=size), sg.Text("", size=size_result,  font=font, key = "YOU")],
    [sg.Text("対戦結果:", font=font, size=size), sg.Text("", size=size_result,  font=font, key = "result")]

]

window = sg.Window("janken app", layout)

while True:
    event, values = window.read()

    if event is None:
        break

    if event == "judge":

        # 対応リスト
        choice = {0: "グー", 1: "チョキ", 2: "パー"}

        # あなたの手
        if values["gu"] == True:
            your_num = 0
        if values["choki"] == True:
            your_num = 1
        if values["pa"] == True:
            your_num = 2

        # CPUの手
        cpu_num = np.random.randint(0, 3)
        result = judgement(your_num, cpu_num)

        window["CPU"].update(choice[cpu_num])
        window["YOU"].update(choice[your_num])
        window["result"].update(result)

window.close()

PySimpleGUIをさらに詳しく!

https://zenn.dev/monaka37/articles/6e55b4e5be8fa7
https://zenn.dev/monaka37/articles/17802e54eb158b

Discussion