tkinter.(ttk.)Scale【スケール (スライダーバー) ウィジェット】
メモ ( 作成 例 レイアウト方向 例 値の設定・取得 例 値表示 例 ) オプション メソッド 例
メモ
- スケール (スライダーバー) ウィジェットの作成〔 例 〕
- tkinter.Scale:従来のウィジェット
- tkinter.ttk.Scale:テーマ付きウィジェット
注意する相違点 Scale ttk.Scale to【右端または下端の値】のデフォルト 100.0 1.0 現在値・目盛りの表示 下記指定で表示可
・showvalue【現在値の表示有無】
・tickinterval【目盛り表示間隔】なし orient【レイアウト方向】のデフォルト VERTICAL【垂直方向】 HORIZONTAL【水平方向】 - レイアウト方向〔 例 〕
- orient【レイアウト方向】で HORIZONTAL【水平方向】かVERTICAL【垂直方向】を指定
- ttk でstyle【スタイル名】を指定する場合、レイアウト方向により別の指定
- 垂直方向のデフォルトは下方向に値が増加するが、上方向で値を増加させるには、 from【上端の値】と to【下端の値】を逆転
- 値の設定・取得〔 例 〕
- 設定
ウィジェットの set( )【現在値 設定】
variable【値用ウィジェット変数】の set( )【値 設定】
value【値】ttk オプション - 取得
ウィジェットの get( )【現在値 取得】
variable【値用ウィジェット変数】の get( )【値 取得】
value【値】ttk オプション
command【値変更コールバック関数】で渡される現在値
- 設定
- 値表示〔 例 〕
- tk:showvalue【現在値の表示有無】・tickinterval【目盛り表示間隔】を指定
- ttk:command【値変更コールバック関数】で別途作成したウィジェットに現在値を表示
外部リンク
オプション
メモ
- オプションの設定方法
- コンストラクタで辞書型引数 (tk のみ)・キーワード引数として指定
- オプション名を辞書インデックスとして指定 ( widget ['オプション名'] )
- config・configure【オプション設定・取得】で辞書型引数・キーワード引数として指定
- オプション関連のメソッド
- オプション関連メソッド
- Style.configure( ):Style に設定した値
- 注) 実装依存 (各種ドキュメントに相違があり)
オプション 一覧
個別 | tk | ttk | 説明 |
---|---|---|---|
command | ● | Config | 値の変更でコールバックされる関数 (引数:新しい値の文字列) |
orient | ● | Config | レイアウト方向 ・HORIZONTAL【水平方向】 (デフォルト ttk ) ・VERTICAL【垂直方向】 (デフォルト tk ) |
state | ● | Config | 状態 (tk 互換用 ttk:(stateflags)【状態フラグ】を上書き) ・NORMAL:通常状態 ・DISABLED:無効状態 |
(stateflags) | state( ) 〔詳細〕 | 状態フラグ (組合せ:state【状態】の変更なし) ・(なし):通常状態 ・'active':アクティブ状態 ・'disabled':無効状態 | |
値 関連 | tk | ttk | 説明 |
value | Config | 値 (値用ウィジェット変数 を優先 ) | |
variable | ● | Config | 値用ウィジェット変数 |
from_ | ● | Config | 左端または上端の値 (デフォルト:0.0) |
to | ● | Config | 右端または下端の値 (デフォルト: 100.0 tk / 1.0 ttk ) |
resolution | ● | 増減幅 (中間値は移動不可) | |
bigincrement | ● | 大きな増減値 ([Ctrl]+[矢印]等での操作) | |
テキスト | tk | ttk | 説明 |
digits | ● | 値の文字列変換の桁数 | |
font | ● | フォント (tkinter.Font) | |
label | ● | ラベル文字列 | |
showvalue | ● | 現在値の表示有無 (True / False) | |
tickinterval | ● | 目盛り表示間隔 (デフォルト:0 非表示) | |
サイズ・配置 | tk | ttk | 説明 |
length | ● | Config | ウィジェットの長辺サイズ (ピクセル単位 等) |
width | ● | ウィジェットの短辺サイズ (ピクセル単位 等) | |
sliderlength | ● | Style | スライダー部の長辺方向サイズ (ピクセル単位 等) |
外観 | tk | ttk | 説明 |
groovewidth | Style | 溝の幅 | |
relief | ● | 外観 | |
sliderrelief | ● | Style | スライダー部の外観 |
troughrelief | Style | 溝の外観 | |
色 関連 | tk | ttk | 説明 |
background (bg) | ● | Style (―) | 背景色 |
foreground (fg) | ● | 前景色 | |
activebackground | ● | Style.map() [background] | スライダー部のアクティブ状態の背景色 |
highlightbackground | ● | 外枠の色 (入力フォーカスなし) | |
highlightcolor | ● | 外枠の色 (入力フォーカスあり) | |
highlightthickness | ● | 外枠の幅 (入力フォーカス用) | |
darkcolor | Style | スライダー部の右下の暗い色 | |
lightcolor | Style | スライダー部の左上の明るい色 | |
troughcolor | ● | Style | スライダー移動部分の溝の色 |
共通 | tk | ttk | 説明 |
borderwidth (bd) | ● | 境界線の幅 | |
class_ | ○ | クラス名 | |
cursor | ● | Config | マウスカーソル名 |
name | ○ | ○ | インスタンス名 (省略:自動命名) 先頭に半角大文字は不可・ドットは不可 / フルパスで一意 〔 インスタンス識別 〕 |
repeatdelay | ● | オートリピート開始までの時間 (ミリ秒数) | |
repeatinterval | ● | オートリピートの間隔 (ミリ秒数) | |
style | Config | スタイル名 (Horizontal.TScale・Vertical.TScale) | |
takefocus | ● | Config | [Tab]キー等でのフォーカス移動の有無〔フォーカス関連メソッド〕 ・' ' (空文字列):自動設定 ・False:なし (スキップ) ・True:あり (タブストップ) |
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
style.map (スタイル名, 対象 = [(状態, 状態の値)])
対象 | 状態 | オプション | 備考 |
---|---|---|---|
background【背景色】 | active【アクティブ状態】 | activebackground |
色 | 説明 |
---|---|
'色名' | 色名:'red'・'green'・'blue'・'gray0'~'gray100'・'system~' 等 下記参照 Tcl8.6/Tk8.6 - Tk Commands - colors (同名色でも HTML5:カラー定義 と定義に差異あり) |
'#RGB' | 16進 4ビット |
'#RRGGBB' | 16進 8ビット |
'#RRRGGGBBB' | 16進 12ビット |
'#RRRRGGGGBBBB' | 16進 16ビット |
マウスカーソル名の詳細 ( cursor )
マウスカーソル名 | 説明 |
---|---|
'マウスカーソル名' | 下記参照 ('arrow'・'wait' 等) Tcl8.6/Tk8.6 - Tk Commands - cursors (英語) Tkinter 8.5 reference: a GUI for Python - Cursors (英語) |
外観の詳細 ( relief )
外観 | 説明 |
---|---|
FLAT | フラット |
GROOVE | 凹み枠 |
RAISED | 隆起 (凸) |
RIDGE | 隆起枠 (凸枠) |
SOLID | 実線 |
SUNKEN | 凹み |
メソッド
コンストラクタ | 備考 |
---|---|
Scale(master=None, cnf={ }, **kw) ttk.Scale(master=None, **kw) | コンストラクタ master親 (tkinter.Tk【トップレベルウィンドウ】・コンテナウィジェット) cnf (辞書型引数)辞書型のオプション kw (キーワード引数)オプション (複数可) |
固有メソッド | 備考 |
coords(value=None) tk | |
get( ) | 現在値の取得 |
identify(x, y) tk | |
set(value) | 現在値の設定 |
共通メソッド (抜粋) 〔詳細はリンク先〕 | 備考 |
cget( 'option' ) widget['option'] | オプション値 取得 下の構文はオプション値の設定も可 |
config( ~ ) configure( ~ ) | オプション 設定・取得 |
pack( ~ ) | 配置 (パック形式) |
grid( ~ ) | 配置 (グリッド形式) |
place( ~ ) | 配置 (座標形式) |
state( ~ ) ttk | 状態フラグ 取得・設定 |
instate( ~ ) ttk | 状態フラグ チェック |
例
作成
import tkinter as tk
import tkinter.ttk as ttk
# トップレベルウィンドウ作成
root = tk.Tk()
# tk.Scale
var_scale = tk.DoubleVar()
var_scale.set(30)
scale = tk.Scale(
root,
variable=var_scale,
orient=tk.HORIZONTAL,
tickinterval=20,
length=200,
)
scale.pack(padx=10, pady=10)
# ttk.Scale
var_scale_ttk = tk.DoubleVar()
var_scale_ttk.set(0.3)
scale_ttk = ttk.Scale(
root,
variable=var_scale_ttk,
length=200,
)
scale_ttk.pack(padx=10, pady=10)
# メインループ
root.mainloop()
レイアウト方向
import tkinter as tk
import tkinter.ttk as ttk
# トップレベルウィンドウ作成
root = tk.Tk()
# tk.Scale (HORIZONTAL)
var_scale_h = tk.DoubleVar(value=30)
scale_h = tk.Scale(
root,
orient=tk.HORIZONTAL,
variable=var_scale_h,
tickinterval=20,
length=200,
background="cyan",
)
scale_h.grid(row=0, column=0, padx=10, pady=10)
# ttk.Scale (HORIZONTAL)
style = ttk.Style()
style.configure(
"example.Horizontal.TScale",
background="cyan",
)
var_scale_h_ttk = tk.DoubleVar(value=30)
scale_h_ttk = ttk.Scale(
root,
style="example.Horizontal.TScale",
orient=tk.HORIZONTAL,
variable=var_scale_h_ttk,
to=100,
length=200,
)
scale_h_ttk.grid(row=1, column=0, padx=10, pady=10)
# tk.Scale (VERTICAL)
var_scale_v = tk.DoubleVar(value=30)
scale_v = tk.Scale(
root,
orient=tk.VERTICAL,
variable=var_scale_v,
tickinterval=20,
from_=100,
to=0,
background="lightblue",
)
scale_v.grid(row=0, column=1, rowspan=2, padx=10, pady=10)
# ttk.Scale (VERTICAL)
style.configure(
"example.Vertical.TScale",
background="lightblue",
)
var_scale_v_ttk = tk.DoubleVar(value=30)
scale_v_ttk = ttk.Scale(
root,
style="example.Vertical.TScale",
orient=tk.VERTICAL,
variable=var_scale_v_ttk,
from_=100,
to=0,
)
scale_v_ttk.grid(row=0, column=2, rowspan=2, padx=10, pady=10)
# メインループ
root.mainloop()
値の設定・取得
値表示
import tkinter as tk
import tkinter.ttk as ttk
def copy():
scale_a2.set(scale_a1.get())
var_scale_b2.set(var_scale_b1.get())
scale_a2_ttk.set(scale_a1_ttk.get())
var_scale_b2_ttk.set(var_scale_b1_ttk.get())
scale_c2_ttk['value'] = scale_c1_ttk['value']
def set_label(value):
label['text'] = str(round(float(value), 2))
# トップレベルウィンドウ作成
root = tk.Tk()
# tk.Scale (A1)
scale_a1 = tk.Scale(
root,
orient=tk.HORIZONTAL,
tickinterval=20,
length=200,
)
scale_a1.set(10)
scale_a1.grid(row=0, column=0, padx=10, pady=5)
# tk.Scale (B1)
var_scale_b1 = tk.DoubleVar(value=20)
scale_b1 = tk.Scale(
root,
orient=tk.HORIZONTAL,
variable=var_scale_b1,
tickinterval=20,
length=200,
)
scale_b1.grid(row=1, column=0, padx=10, pady=5)
# tk.Scale (A2)
scale_a2 = tk.Scale(
root,
orient=tk.HORIZONTAL,
tickinterval=20,
length=200,
)
scale_a2.grid(row=4, column=0, padx=10, pady=5)
# tk.Scale (B2)
var_scale_b2 = tk.DoubleVar()
scale_b2 = tk.Scale(
root,
orient=tk.HORIZONTAL,
variable=var_scale_b2,
tickinterval=20,
length=200,
)
scale_b2.grid(row=5, column=0, padx=10, pady=5)
# Button
button = tk.Button(
root,
command=copy,
text="コピー\n値取得 & 値設定",
)
button.grid(row=3, column=0, columnspan=2, padx=10, pady=5)
# Label
label = ttk.Label(
root,
text="label",
width=5,
relief=tk.SUNKEN,
)
label.grid(row=0, column=2, padx=10, pady=5)
# ttk.Scale (A1)
scale_a1_ttk = ttk.Scale(
root,
command=set_label,
length=200,
)
scale_a1_ttk.set(0.3)
scale_a1_ttk.grid(row=0, column=1, padx=10, pady=5)
# ttk.Scale (B1)
var_scale_b1_ttk = tk.DoubleVar(value=0.4)
scale_b1_ttk = ttk.Scale(
root,
variable=var_scale_b1_ttk,
length=200,
)
scale_b1_ttk.grid(row=1, column=1, padx=10, pady=5)
# ttk.Scale (C1)
scale_c1_ttk = ttk.Scale(
root,
value=0.5,
length=200,
)
scale_c1_ttk.grid(row=2, column=1, padx=10, pady=20)
# ttk.Scale (A2)
scale_a2_ttk = ttk.Scale(
root,
length=200,
)
scale_a2_ttk.grid(row=4, column=1, padx=10, pady=5)
# ttk.Scale (B2)
var_scale_b2_ttk = tk.DoubleVar()
scale_b2_ttk = ttk.Scale(
root,
variable=var_scale_b2_ttk,
length=200,
)
scale_b2_ttk.grid(row=5, column=1, padx=10, pady=5)
# ttk.Scale (C2)
scale_c2_ttk = ttk.Scale(
root,
value=0.0,
length=200,
)
scale_c2_ttk.grid(row=6, column=1, padx=10, pady=20)
# メインループ
copy()
root.mainloop()