TKinterを利用してパソコン設定変更ソフトを作ってみる(初心者)

![pcname.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969670/7c95f292-321d-15f7-75c5-31cf1468a2c3.png)


pythonの勉強として簡単なソフトを作ってみよう！

なんて意気込みでtkinterで1つのソフトを作ってみます。
とりあえず、Windows上で設定変更をかけるソフト。


名前は「お家に帰ろう」

「設定変更が便利になるといいな」的なコンセプトで作り始めました。


<b>Windowsの設定変更ソフトを作りたい方</b>に、少し参考になる程度の情報が提供できたらいいな！

<h2>tkinterとは？</h2>
python標準のGUIライブラリで、古い見た目のUIを実装できます。

調べていくと、どうやらtkinterとtkinter.ttkでUIデザインが異なる模様。
ttkの方がモダンなUIになります。

さらに2018年からPySimpleGUIの開発が始まっており、コードも短く、よりモダンなデザインでGUIを組める模様。


今回は<b>NETに情報が多いから</b>tkinterでチャレンジしてみよう！ってわけで作成を開始しました。


<h2>作ったもの</h2>
![ouchi.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969670/ad8f9423-fc30-1c71-835e-e6b2ad7d3548.png)

こんな感じです。
うん。素人の作品っぽくていいですね　笑

とりあえず下記を実装してみました。
・PC名変更
・IPv4変更
・自動ログオン

<h2>作って気づいたこと</h2>
ごく当たり前のことで、薄々わかってたんですが、<b>せめて設計書的なものは作りましょう 笑</b>

はじめは「PC名変更」くらいしか考えてなかったのですが、後から実装したい機能がどんどん増えてきてしまいました。。

その都度UIに変更を加えていったので、ここがモーレツに面倒でした。
いや、ほんとアホですよね。うん。
思い付きはダメデス


こんなノリで作り始めましたが、上の画像の機能自体はちゃんと動くようになりました。

Windowsは権限、UACの問題があるので、そのへんの動きをおさえて変更が完了するように作る必要があります。

そのほか、process.runやレジストリ書き込み、入力文字のチェックやログ出力の実装、pyarmor、exe化、モジュール分割などなど入れて、再起動後は自動的にstep2としてプログラムを起動するところまで作ってます。


デバッグやブラッシュアップができればフリーソフト公開なんてできればいいのですが、まだ先かなぁと思ってます。


でも、やっぱり<b>1つのモノを作ることで1連の流れが見えてきますね！</b>
勉強になりました。

<h2>tkinterの実装</h2>
こんな感じのコードでGUIの実装を始めます。

```
class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.pack()
        self.master.geometry("620x630")
        self.master.title("お家に帰ろう")
        nb = ttk.Notebook(width=200, height=200)
```




メニューバーはこんな感じ。

```
        # メニューバーの作成
        self.menubar = tk.Menu(master)
        master.configure(menu = self.menubar)
        # ファイルメニュー
        filemenu = tk.Menu(self.menubar, tearoff = 0)
        self.menubar.add_cascade(label = "ファイル", menu = filemenu)
        # ～内容
        filemenu.add_command(label = "ファイルから読み込む(開発中)")
        # ～内容
        filemenu.add_command(label = "ファイルに保存する(開発中)")
        # セパレーター
        filemenu.add_separator()
        filemenu.add_command(label = "終了", command = lambda: master.destroy())
```


タブの実装

```
        #タブ
        tab1 = tk.Frame(nb)
        tab2 = tk.Frame(nb)
        tab3 = tk.Frame(nb)
        tab4 = tk.Frame(nb)
        self.textbox1 = tk.Text(tab4)
        self.textbox1.configure(font=("", 14, ""))
        self.textbox1.pack()
        self.textbox1.place(x=150, y=0,width = 460, height = 570)
        tab5 = tk.Frame(nb)
```


ちなみにtab4はtextboxを実装します。

例えばエクセルからパラメータを張り付けて設定変更できると便利だよね？なんて発想。
実装自体は難しくないレベル。

CSVファイルから読み込んでもいいですし、このあたりはどうやってデータを入れるか、運用に合わせて決めるといいですね！

<h2>設定変更コマンド</h2>
単純にコマンドプロンプトのコマンドをprocess.runで実装できます。ただ、errorlevelを受け取る方法がわかりませんでした。

なので判定を入れ込むならpowershellの方がいいかもしれませんね。

今回はpowershellでコンピュータ名を変更し、戻り値を判定して正常、異常を判定しています。

<h2>IP変更</h2>
今回はコマンドプロンプトで実装しました。

判定はレジストリからパラメータを取得し、変更後の値と比較すればOK。
単純にipconfigなんて打ってもオフライン時は出力しないので注意が必要。

なお、レジストリを参照すれば「イーサネット」などのインタフェースもリストで出力できますヨ

<h2>チェック機能</h2>
値のチェックは入力なしや文字数などで判定させていますが、IPアドレス形式は下記で簡単にチェックできます。

```
import ipaddress as ipadd
def chk_ipv4(self,ipaddress):
    try:
        ipadd.ip_address(ipaddress)
        return "ok"
    except ValueError:
        return "ng"
```

<h2>難易度</h2>
pythonの初学者にとってちょうどいいくらいのレベルなのかな？と思います。

私自身、python勉強して2ヶ月くらいでつくりました。

ただしWindowsの動きがわかってないと作るのが難しいとは思います。

<h2>同じようなソフトを作る方へ</h2>
pyinstallerでexe化ができますが、process.runを利用する場合は下記の記事を読んだ方がいいです。とても参照になりました。（ありがとうございます。）
https://sapporo-president.com/archives/15581

普通にexeにすると動作しませんでした。