見出し画像

パワプロのエディット機能を作ってみた

パワプロ、楽しいですよね!来月2年ぶりに新作がでるので、
めっちゃたのしみです!!!

『eBASEBALLパワフルプロ野球2022』プロモーションムービー - YouTube

パワプロには、サクセス、対戦、パワフェス、栄冠ナイン等
いろいろなモードがあります。

なにが楽しいって、

  • 自分で妄想した選手を具現化 し、

  • 具現化した選手の活躍するところをみる!!

だとぼくは思っています。

ただ、理想の選手を具現化するのはむずかしい。。。数時間かけてがんばって選手をつくったもののいい感じの選手ができない。つらい。時間も限られてるのに。。

そこで、GUIアプリ開発練習をきっかけに、それぽいのを作ってみました。
以下の画面に、選手情報を入れて、保存ボタンを押すと、、

入力画面

ExcelDBの最後尾に"城島"さんが追加されました!!ああうれしい。

出力結果

ざっと考えるだけでも以下のような課題があります。。

  • 入力規則※現在は年齢列にダルビッシュて入れられる。

  • GUIきれいに

  • 投手 の入力

  • 顔情報追加

  • DB情報つかって妄想する機能(オーダー設定、チーム作成etc)

お仕事用の開発スキルをつけるの兼ねて、ちょくちょくよくしていけたらなと思います♪

以下、Pythonコードです。もしよければご参考くださいませ。

from stringprep import c7_set
import tkinter

from openpyxl import Workbook
from openpyxl import load_workbook

class Application(tkinter.Frame):
    def __init__(self, root=None):
        super().__init__(root, width=800, height=560,
                         borderwidth=1, relief='groove')
        self.root = root
        self.pack()
        self.pack_propagate(0)
        self.create_widgets()

    def create_widgets(self):
        # 閉じるボタン
        quit_btn = tkinter.Button(self)
        quit_btn['text'] = '閉じる'
        quit_btn['command'] = self.root.destroy
        quit_btn.pack(side = "bottom")
        
        #保存ボタン
        save_btn = tkinter.Button(self)
        save_btn['text'] = '保存'
        save_btn['command'] = self.save_btn
        save_btn.pack(side = "bottom")

        #ラベル_タイトル
        label_title = tkinter.Label(self, text = "オリジナル選手作成")
        label_title.pack(side = "top")
        

        #ラベル_名前
        label_name = tkinter.Label(self, text = "名前")
        label_name.pack(side = "left")

        #テキストボックス_名前
        self.text_box_name = tkinter.Entry(self)
        self.text_box_name["width"] = 12
        self.text_box_name.pack(side = "left")

        #ラベル_年齢
        label_name = tkinter.Label(self, text = "年齢")
        label_name.pack(side = "left")
        
        #テキストボックス_年齢
        self.text_box_age = tkinter.Entry(self)
        self.text_box_age["width"] = 5
        self.text_box_age.pack(side = "left")

        #ラベル_キャリア
        label_carrer = tkinter.Label(self, text = "経歴")
        label_carrer.pack(side = "left")
        
        #スピンボックス_キャリア
        sp_carrer = ["高","大","社"]
        self.sp_carrer = tkinter.Spinbox(self, state = "readonly",values = sp_carrer)
        self.sp_carrer["width"] = 3
        self.sp_carrer.pack(side = "left")

        #ラベル_出身
        label_homwtown = tkinter.Label(self, text = "出身")
        label_homwtown.pack(side = "left")

        #スピンボックス_出身
        sp_hometown = ["沖縄","福岡","大阪","愛知","東京","北海道"]
        self.sp_hometown = tkinter.Spinbox(self, state = "readonly",values = sp_hometown)
        self.sp_hometown["width"] = 5
        self.sp_hometown.pack(side = "left")

        #ラベル_打席
        label_homwtown = tkinter.Label(self, text = "打席")
        label_homwtown.pack(side = "left")

        #スピンボックス_打席
        sp_butterbox = ["右","左","両"]
        self.sp_butterbox = tkinter.Spinbox(self, state = "readonly",values = sp_butterbox)
        self.sp_butterbox["width"] = 3
        self.sp_butterbox.pack(side = "left")

        #ラベル_守備位置
        label_position = tkinter.Label(self, text = "守備位置")
        label_position.pack(side = "left")

        #スピンボックス_打席
        sp_position = ["投","捕","一","二","三","遊","左","中","右"]
        self.sp_position = tkinter.Spinbox(self, state = "readonly",values = sp_position)
        self.sp_position["width"] = 3
        self.sp_position.pack(side = "left")


        items_ability = ["G","F","E","D","C","B","A","S"]

        #ラベル_ミート
        label_meat = tkinter.Label(self, text = "ミート")
        label_meat.pack(side = "left")

        #スピンボックス_ミート
        self.sp_meat = tkinter.Spinbox(self, state = "readonly",values = items_ability)
        self.sp_meat["width"] = 3
        self.sp_meat.pack(side = "left")

        #ラベル_パワー
        label_power = tkinter.Label(self, text = "パワー")
        label_power.pack(side = "left")

        #スピンボックス_パワー
        self.sp_power = tkinter.Spinbox(self, state = "readonly",values = items_ability)
        self.sp_power["width"] = 3
        self.sp_power.pack(side = "left")

        #ラベル_走力
        label_run = tkinter.Label(self, text = "走力")
        label_run.pack(side = "left")

        #スピンボックス_走力
        self.sp_run = tkinter.Spinbox(self, state = "readonly",values = items_ability)
        self.sp_run["width"] = 3
        self.sp_run.pack(side = "left")

        #ラベル_肩力
        label_shoulder= tkinter.Label(self, text = "肩力")
        label_shoulder.pack(side = "left")

        #スピンボックス_肩力
        self.sp_shoulder = tkinter.Spinbox(self, state = "readonly",values = items_ability)
        self.sp_shoulder["width"] = 3
        self.sp_shoulder.pack(side = "left")
        
        #ラベル_守備力
        label_defense = tkinter.Label(self, text = "守備力")
        label_defense.pack(side = "left")

        #スピンボックス_守備力
        self.sp_defense = tkinter.Spinbox(self, state = "readonly",values = items_ability)
        self.sp_defense["width"] = 3
        self.sp_defense.pack(side = "left")




    def save_btn(self):
        #エクセルファイルの読み込み
        wb = load_workbook(filename = "C:/Users/panch/OneDrive/GUI_tkinter/data.xlsx")
        #ワークシートの指定
        sheet_name = wb.sheetnames[0]
        ws = wb[sheet_name]


        #次に入力する行を取得
        inputRow = ws.max_row + 1 #最終行 + 1
        
        
        #名前を保存
        c1 = ws.cell(inputRow,1) 
        c1.value =  self.text_box_name.get()
        #年齢を保存
        c2 = ws.cell(inputRow,2) 
        c2.value =  self.text_box_age.get()
        
        #経歴を保存
        c3 = ws.cell(inputRow,3) 
        c3.value = self.sp_carrer.get()

        #出身を保存
        c4 = ws.cell(inputRow,4) 
        c4.value = self.sp_hometown.get()
        
        #打席を保存
        c5 = ws.cell(inputRow,5) 
        c5.value = self.sp_butterbox.get()

        #守備位置を保存
        c6 = ws.cell(inputRow,6) 
        c6.value = self.sp_position.get()

        #ミートを保存
        c7 = ws.cell(inputRow,7) 
        c7.value = self.sp_meat.get()
        
        #パワーを保存
        c8 = ws.cell(inputRow,8) 
        c8.value = self.sp_power.get()
        
        #走力を保存
        c9 = ws.cell(inputRow,9) 
        c9.value = self.sp_run.get()
        
        #肩力を保存
        c10 = ws.cell(inputRow,10) 
        c10.value = self.sp_shoulder.get()

        #守備力を保存
        c11 = ws.cell(inputRow,11) 
        c11.value = self.sp_defense.get()

        
        

        wb.save("C:/Users/panch/OneDrive/GUI_tkinter/data.xlsx")

        print("保存しました(^^♪")


root = tkinter.Tk()
root.title('サプー アプリ')
root.geometry('840x580')
app = Application(root=root)
app.mainloop()

コード、出力先について、ファイルを共有いたします(__) 

ではまた~

この記事が気に入ったらサポートをしてみませんか?