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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回はチェックボックスを配置した。
チェック状態を判定する変数の生成やPython側からのチェック状態切り替えもできるっぽい。
とりあえず、必要な5つのチェックボックスを配置し終えた。

今回は、最後のウィジットであるScaleを配置する。
いままでのものと少し毛色が違うかもしれない。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

ついに最後のウィジット

太郎くん
太郎くん

次は・・・スライダーことScaleかな?
これで最後なんじゃない?

フクさん
フクさん

そうだね。
ウィジットの配置としては、残りはScaleだけだ。

太郎くん
太郎くん

じゃーサクっと配置して終わらせてしまおう。

フクさん
フクさん

(配置して終わりじゃないんだよなぁ)

Scaleの配置

フクさん
フクさん

配置自体はいままでのウィジットと大差はないが、
振る舞いが少し複雑なウィジットなのでパラメータはそこそこ多い。

太郎くん
太郎くん

確かにチェックボックスと比べるとScaleの方がいろいろ必要そうなイメージはあるな。

フクさん
フクさん

コードとしては以下になる。

def change(value):
    if scalbln.get():
        _ytmp = float(value)
        print(_ytmp)

scale = tkinter.Scale(
    root,
    label = "target Speed",
    orient=tkinter.VERTICAL,    #方向
    command=change,             #調整時に実行
    length = 300,
    from_ = 100,
    to = 0
    )
scale.pack(side = tkinter.LEFT)
太郎くん
太郎くん

なんかイキナリ関数が宣言されてるんだけど・・・。

フクさん
フクさん

関数の方はScaleが変更された際にコールバックしてもらう関数だ。
まぁ後で説明しよう。

Scale生成についての説明

フクさん
フクさん

まずはScale生成の方の説明をしてしまおう。

フクさん
フクさん

まず
orient=tkinter.VERTICAL
縦か横を決めている。
VERTICALは縦でHORIZONTALを指定すると横のScaleになる。

太郎くん
太郎くん

あー確かに縦のやつと横のやつがあるよねー。

フクさん
フクさん

そして、
command=change
で先のコールバック関数を設定している。
Scaleがユーザによって変更された際に呼び出さる関数だね。

太郎くん
太郎くん

length = 300
はScaleの長さをピクセルで指定してるのかな?

フクさん
フクさん

正解だ。

フクさん
フクさん

そして
from_ = 100,
to = 0
だが、
これは
from_が開始位置の値で、toが終了位置の値だ。

太郎くん
太郎くん

あれ?
開始が100で終了が0って・・・じゃない?

フクさん
フクさん

そう。
逆なんだよ。
というか逆にしておかないと、上が0、下が100となって
グラフの描画の値の動きとになるんだよねー。
まぁ特にグラフの描画方向と合わせる必要もないのだけど、
なんか気持ち悪いからScaleの方を合わせこんだ。

太郎くん
太郎くん

ほう。
確かに、上が0だと今回に限っては妙な感じになるね。
でも逆にしてもOKなもんなの?

フクさん
フクさん

一応、Tk公式情報の方でも逆転させてもOKという記述はあるね。

Specifies a real value corresponding to the right or bottom end of the scale. This value may be either less than or greater than the -from option.

tcl/tk マニュアルより(https://tcl.tk/man/tcl8.6/TkCmd/scale.htm#M18)

↓日本語訳

目盛りの右端または下端に相当する実数値を指定します。この値は-fromオプションよりも小さくても大きくても構いません。

太郎くん
太郎くん

ということは、こういう使い方を想定しているってことなのか。

まとめ

フクさん
フクさん

まとめだよ。

  • 最後のウィジットとしてScaleを配置。
    • いままでのウィジットの中では最もパラメータが多い。
    • 縦置き、横置きの指定ができる。
    • commandという引数で値変更時のコールバックを設定できる。
    • to、from_で値の範囲を指定できるが大きさが逆転しても良い。
      • 0値の配置を逆にしたい場合は意図的に逆転させる。(公式もOK情報あり)

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

コメント

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