バックナンバーはこちら。
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情報あり)
バックナンバーはこちら。
コメント