バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
tkinterはPython標準ライブラリのためインストール済みであった。
よって、「python -m tkinter」でウィンドウが出てくるかの動作確認のみ実施。
環境としては準備がおおよそ整ってきたのでそろそろ実際にtkinterを触り始めようと思う。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
tkinterのimport

じゃ、今回からtkinterを触っていく感じかな?

そうだね。

いままでのPythonの性格からすると
tkinterライブラリのimportからかな?

うん。
まぁimportはなんのひねりも無くて、tkinterを指定すればOKだ。
import tkinter
リソースエディタみたいなのはあるのか?

というわけで実際にGUIを・・・。

イメージ的には何かしらのグラフィックなエディタで部品を配置していくような感じなのだけど?

Visual Studioのリソースエディタを想定してるみたいだけど、
そんなものは無い。

まじか。

でも、そんなに部品数も多くないし、一個ずつ生成と配置をすればOKだ。

(よくわからんがとりあえず黙って聞いておこう・・・)
メインウィンドウ生成

まずは部品を配置していくためのメインウィンドウの生成だ。

まずはこれが無いとはじまらないよね。

コードとしては以下になる。
root = tkinter.Tk()
root.title("DC Motor Control")

お!
なんかなんも張り付いてないウィンドウが出てきた。

※ 環境によっては「root.mainloop()」を呼び出さないと表示されないかもしれません。
※ ウィンドウを閉じるとrootに内包された情報も破棄されるので再度rootを生成して各ウィジットを再配置する必要があります。

ウィンドウの初期サイズが小さいから見えないけど、
キャプションバーに「DC Motor Control」ってのが入ってるはずだ

確かにそうなってるっぽい。
メインウィンドウの位置と大きさ

次にメインウィンドウの位置と大きさを決めてしまおう。

位置も固定にするの?

固定じゃなくても良いんだけど、同じ位置にいた方が操作しやすいかなって思って。
単純に私の好みだ。

まぁそういうのにこだわる人っているよねー。(鳥だけど)

コードとしては以下になる。
w = root.winfo_screenwidth() #モニター横幅取得
h = root.winfo_screenheight() #モニター縦幅取得
root.geometry(str(int(w/2))+"x"+str(int(h/2))+"+"+str(int(w/2))+"+0") #位置設定

あ!
メインウィンドウが大きくなってディスプレイの右上に配置された!


コードの方だけど、
root.geometryに文字列っぽいのを渡してるね?
これは何?

大きさと位置を指定する場合、ピクセル指定の特定ルールの文字列を渡す。
今回の太郎くんの環境だと以下の文字列になっているはずだ。
‘960×540+960+0’

そして、この文字列の意味としては以下になる。
[横幅]x[縦幅]+[ウィンドウ左上横位置]+[ウィンドウ左上縦位置]

???

まぁ図解するとこんな感じだ。
![tkinterメインウィンドウ大きさ位置指定文字列、[横幅=960]、[縦幅=540]、[ウィンドウ左上縦位置=0]、[ウィンドウ左上横位置=960]](https://www.simulationroom999.com/blog/wp-content/uploads/2021/09/04_tkinterメインウィンドウ大きさ位置指定文字列-1024x670.png)

なるほど。
これは分かり易い。

次はmatplotlibの埋め込みかな。
まとめ

まとめだよ。
- tkinterのimportはそのまんま。
- 「import tkinter」
- VisualStudioのリソースエディタのようなものは無い。
- メインウィンドウ生成方法解説。
- titleも指定可能。
- メインウィンドウの大きさと位置指定。
- 文字列で以下のような感じで指定。
- ‘960×540+960+0’。
- 文字列で以下のような感じで指定。
バックナンバーはこちら。
コメント