【PyFMI】最小構成のMBD事例 第2章 その111【リアルタイム描画⑤】

【PyFMI】最小構成のMBD事例 第2章 その111【リアルタイム描画⑤】 事例
【PyFMI】最小構成のMBD事例 第2章 その111【リアルタイム描画⑤】

バックナンバーはこちら。
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")
太郎くん
太郎くん

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

tkinterメインウィンドウ、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")    #位置設定
太郎くん
太郎くん

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

tkinterメインウィンドウ大きさと配置、DC Motor Control
太郎くん
太郎くん

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

フクさん
フクさん

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

‘960×540+960+0’

フクさん
フクさん

そして、この文字列の意味としては以下になる。

[横幅]x[縦幅]+[ウィンドウ左上横位置]+[ウィンドウ左上縦位置]

太郎くん
太郎くん

???

フクさん
フクさん

まぁ図解するとこんな感じだ。

tkinterメインウィンドウ大きさ位置指定文字列、[横幅=960]、[縦幅=540]、[ウィンドウ左上縦位置=0]、[ウィンドウ左上横位置=960]
太郎くん
太郎くん

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

フクさん
フクさん

次はmatplotlibの埋め込みかな。

まとめ

フクさん
フクさん

まとめだよ。

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

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました