スプレッドシート対応抽選デスクトップアプリの作成

#はじめに
■抽選デスクトップアプリvar0.1　報告
<iframe width="560" height="315" src="https://www.youtube.com/embed/LKmEwXvMsBg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


抽選デスクトップアプリを制作してみた。
例えば、ポケモンのパーティをランダムに構築してみたいと思った時や、
トレーディングカードゲームで、デッキから最初に引く5枚をシミュレーションする
等に利用できる。

##きっかけ
最近、転職や副業、動画配信での利用を意識するようになり、
苦手意識のあるGUIのデスクトップアプリに挑戦してみることにした。

実は抽選プログラムそのものはすでにできていたのだが、
開発環境から実行するにとどまっていたため、
今回のGUIのデスクトップアプリの制作対象とした。

##tkinterの理由
GUIアプリ作成にあたり、様々なライブラリがあったが、
標準で使え、参考資料も多いtKinterを試してみることにした。

開発環境
・Eclipse 4.8 photon
・Python3.10.0

##イメージ図

配信でadob XDを利用を試みたが、
配信が上手くいかなかったため、
泣く泣くペイントツールを使用した。
イラストの出来は許してほしい。

![抽選アプリ　スプレットシート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1877489/6dde9d2c-8490-f116-1ed7-b987bdc0f95a.png)

簡単にまとめると以下のような動きをしたい。
・上のテキストボックスに入力したい数を記入、
・中段のリストボックスで抽選したいスプレットシート名を決定
・下段のボタンを入力すると、下部のテキストボックスにて抽出結果が表示される

他にも追加したい機能があったが、最低限にまとめると上記の内容となった。

##プログラム部分を作る前に・・・
Pythonでスプレットシート使うためには準備が必要
Google Drive API　というのを有効にする等あるが、
詳細は参考サイトを御覧ください。

ソースコードについては、手探りの部分が多く
整理されていないところもある。
ご了承ください。

今回は一部のコードを載せている。

#プログラムについて
###ライブラリインポート

```Python
#Random_Form.py
from tkinter import *
from tkinter import ttk
import Qdeeplearn as ql
```
tkinter関係のライブラリに加え、
自作したライブラリをimportしている。

自作ライブラリは、元々作成している
「スプレットシートを読み込み、抽選する」プログラムである。
名残として機械学習関連の名前となっている。

##メイン関数

```Python
#メイン関数
if __name__ == '__main__':
    #自作ライブラリ　スプレットシート読み込みクラスを起動
    a=ql.get_sheet_titles()

    #Tkinterライブラリにて画面を表示
    win = Tk()
    app=Main_Application(master=win)
    app.mainloop()
```

処理としては、
スプレットシート関係のクラスを読み込み、
画面を表示しているだけである。

##Main_Applicationクラス

```Python
class Main_Application(ttk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.pack()
        master.minsize(width=480,height=360)
        master.title("抽選アプリ")
        self.get_texts=""
        self.button_list_flag=False

        self.widget()
```

画面を表示するクラスである。
self.widget()
以降にテキストボックス等のオブジェクトを配置する。

##動作部分
```Python
    def buttonClick(self,combox_data):
        len_value=self.list_entry_num.get()
        self.result_txt.delete("1.0", "end")
        if len_value == "":
            self.button_list_flag=False
        elif (len_value.isdecimal()==True):
            if combox_data=="":
                self.button_list_flag=False
                self.result_txt.insert("end","リストを選んでください")
            elif combox_data!="":
                self.button_list_flag=True
                sl=self.get_name_data(combox_data,int(len_value))
                self.button_list_flag=True
                for i in sl:
                    self.result_txt.insert("end",i + "\n" )
        else:
            self.button_list_flag=False
            self.result_txt.insert("end","半角数字を入力してください")
```

ボタンをクリックした後の処理を表す。

```Python
    def get_name_data(self,sheets_list,cardunits):
        wkst = ql.load_Spreadsheets(sheets_list)
        cardlist=[]
        reslist=[]
        nlist=[]

        rangse=wkst.get_all_values()
        nlist=ql.organize(rangse,"名前")

        cardlist=ql.data_processing(nlist)
        reslist=ql.roulette_getlist_few(cardlist,cardunits)

        return reslist
```
こちらの関数で、スプレットシートの結果をテキストボックスに伝える。

以上です。
見てくださってありがとうございました。

参考サイト
[Python入門 (6) - TkinterによるGUIの作成](https://note.com/npaka/n/nfa8d16c3624e)

https://qiita.com/michimichix521/items/09e90986dbc3c92cae66

[Google Spread Sheets に Pythonを用いてアクセスしてみた](https://qiita.com/164kondo/items/eec4d1d8fd7648217935#%E5%8F%82%E8%80%83%E3%82%B3%E3%83%BC%E3%83%89%E8%A7%A3%E8%AA%AC)