【Tkinterシリーズ 09/15】ウィジェット(スクロールバー)

22. ウィジェットScrollbar

リストボックスやキャンバスなどの多くのウィジェットは、ウィンドウをより大きな仮想領域にスライドさせるように機能します。スクロールバー ウィジェットをそれらに接続して、ユーザーがコンテンツに対してビューをスワイプする方法を提供できます。以下は、関連するエントリ ウィジェットを含むスクロールバー ウィジェットのスクリーンショットです。

  • スクロール バーは、上に示したように水平にすることも、垂直にすることもできます。スクロール可能な 2 つの次元を持つウィジェット (キャンバスやリストボックスなど) は、水平スクロールバーと垂直スクロールバーの両方を持つことができます。

  • スライダー、またはスクロール サム は、現在のスクロール位置を示す盛り上がった長方形です。

  • 両端にある2 つの三角形の矢印は、位置を小さなステップで移動するために使用されます。左または上にあるものが呼び出し、右または下にあるものが呼び出します。arrow1arrow2

  • 谷とは、矢印の後ろのくぼんだ領域とスライダーの後ろに見える領域のことです。このスロットは、2 つの名前付き領域 (スライダーの上または左側) と (スライダーの下または右側) に分割されます。trough1trough2

  • スライダーのサイズと長さに対する相対的な位置 ウィジェット全体で、その合計サイズに対する相対的なサイズと位置を示すビュー。たとえば、垂直スクロールバーがリストボックスに関連付けられており、そのスライダーがスクロールバーの高さの 50% から 75% まで伸びている場合、リストボックスの表示部分には、そのセクションの半分から始まるリスト全体が表示されることを意味します。マーク、4 分の 3 エンドマークにあります。

  • 水平スクロール バーで、B1 (ボタン 1) の左矢印をクリックして、ビューを少し左に移動します。右矢印の「B1」をクリックして、「金額別表示」を右に移動します。垂直スクロール バーの場合、上下の矢印をクリックすると、ビューが少しだけ上下に移動します。これらのアクションによって移動するビューの正確な量を確認するには、関連するウィジェットの説明を参照してください。

  • ユーザーは、B1 または B2 を使用してスライダー (中央のボタン) をドラッグして、ビューを移動できます。

  • 水平スクロール バーの場合、スロット内の B1 スライダーの左側にあるビューをクリックすると 1 ページ左に移動し、スライダーの B1 をクリックするとビューが 1 ページ右に移動します。垂直スクロール バーの場合、対応するアクションは表示されているページを上下に移動します。

  • スロット内の任意の場所で B2 をクリックしてスライダを移動し、スライダの左端または上端がマウスの位置、またはマウスにできるだけ近づくようにします。

正規化された位置 スクロール バーは、スライダーの位置を定義するために使用される閉じた間隔 [0.0, 1.0] を参照します。垂直スクロール バーの場合、位置 0.0 は上部、1.0 は下部です。水平スクロール バーの場合、位置 0.0 は左端、1.0 は右端です。

ルート ウィンドウまたはフレームの子ウィンドウとして新しいウィジェットを作成します。Scrollbarparent

    w = tk.Scrollbar(parent, option, ...)

コンストラクターは新しいウィジェットを返します。スクロールバーのオプションには次のものがあります。Scrollbar

表 31.滚动条ウィジェットのオプション

activebackground マウスが上にあるときのスライダーと矢印の色。セクション5.3「色」を参照してください。
activerelief デフォルトでは、スライダーはエンボス スタイルで表示されます。マウスがスライダーの上にあるときに表示されます。tk.RAISED
bgまたはbackground  マウスが上にないときは、スライダーと矢印に色を付けます。
bdまたはborderwidth 3-D 境界線全体の幅、スロットの周囲、矢印とスライダーの 3D 効果。デフォルトでは、谷の周囲に境界線はなく、2 ピクセルの矢印とスライダーの周囲に境界線が表示されます。可能な値については、セクション 3.5「寸法」を参照してください。
command スクロール バーが表示されるたびに呼び出されるプロシージャ。呼び出しシーケンスの詳細については、セクション22.1「スクロールコマンドのコールバック」を参照してください。
cursor マウスがスクロールバーの上に移動します。セクション5.8「カーソル」を参照してください。
elementborderwidth 境界線の幅と矢印の周りのスライダー。デフォルトは です。これは、オプションの値を使用することを意味します。elementborderwidth=-1borderwidth
highlightbackground カラー スクロールバーにフォーカスがない場合にフォーカスを強調表示します。セクション 53「フォーカス: キーボード入力のルーティング」を参照してください。
highlightcolor  スクロールバーにフォーカスがあるときの色に焦点を当てた強調表示。
highlightthickness 焦点の太さが強調されます。デフォルト値は です。フォーカスの強調表示を抑制するように設定します。10
jump このオプションは、ユーザーがスライダーをドラッグしたときの動作を制御します。Normal() では、スライダーを少しドラッグするたびにコールバックが呼び出されます。このオプションを に設定すると、ユーザーがマウス ボタンを放すまでコールバックは呼び出されません。jump=0command1
orient 水平スクロールバー、垂直スクロールバー (デフォルトの向き) に設定します。orient=tk.HORIZONTALorient=tk.VERTICAL
relief グリフ ウィジェットのスタイルを制御します。デフォルトのスタイルは です。このオプションは Windows では効果がありません。tk.SUNKEN
repeatdelay このオプションは、スライダーが谷をその方向に繰り返し押し始める前のボタン 1 の長さを制御します。デフォルト値はミリ秒単位です。repeatdelay=300
repeatinterval このオプションは、スロットでボタン 1 が押されている間にスライダーの移動を繰り返す頻度を制御します。デフォルトは で、単位はミリ秒です。repeatinterval=100
takefocus 通常、スクロール バーで Tab キーを押すと、フォーカス コントロールを調整できます (セクション 53「フォーカス: キーボード入力のルーティング」を参照)。これを望まない場合は動作を設定します。スクロールバーのデフォルトのキーバインディングでは、ユーザーは ← および → 矢印キーを使用して水平スクロールバーを移動でき、↑ および ↓ キーを使用して垂直スクロールバーを移動できます。takefocus=0
troughcolor カラー スロット。
width スクロールバーの幅 (水平の場合は y 次元、垂直の場合は x 次元)。デフォルト値は 16 です。可能な値については、セクション5.1「寸法」を参照してください

スクロールバー オブジェクトのメソッドには次のものがあります。

.activate(element=None)

引数が指定されていない場合、このメソッドはマウスの位置に応じて、 、 、または の文字列を返します。たとえば、マウスがスライダーの上にある場合、メソッドは戻ります。マウスが現在どのコントロール上にもない場合、3 つのコントロールに対して空の文字列が返されます。'arrow1''arrow2''slider''''slider'

(エンボス スタイルと色を使用して) コントロールの 1 つを強調表示するには、このメソッドを呼び出し、強調表示するコントロールを 、 、 、または のいずれかとして識別する文字列を渡します。activereliefactivebackground'arrow1''arrow2''slider'

.delta(dxdy)

マウスの動きをピクセル単位で指定すると、このメソッドは、同じ動きを実現するために現在のスライダーの位置に追加する必要がある値を返します。値は閉じた間隔 [-1.0, 1.0] 内にある必要があります。(dxdy)float

.fraction(xy)

ピクセル位置を指定すると、このメソッドは、その位置に最も近い間隔 [0.0, 1.0] 内の対応する正規化されたスライダー位置を返します。(xy)

.get()

スライダーの現在位置を表す 2 つの数値 (, ) を返します。この値は、水平スクロール バーと垂直スクロール バーのスライダーの左端または上端の位置を示し、値は右端または下端の位置を示します。各値は [0.0, 1.0] の範囲内にあり、0.0 は左端または上の位置、1.0 は右端または下の位置です。たとえば、スライダーが谷の半分から 4 分の 3 まで伸びている場合、タプル (0.5、0.75) が得られる可能性があります。abab

.identify(xy)

このメソッドは、指定された座標にどのスクロールバー コンポーネント (存在する場合) が配置されているかを示す文字列を返します。戻り値は、 のいずれか、または位置がスクロールバー コンポーネント上にない場合は空の文字列です。(xy)'arrow1''trough1''slider''trough2''arrow2'''

.set(firstlast)

スクロールバーを別のウィジェットに接続するには、スクロールバーのメソッドに または を設定します。パラメータは、メソッドによって返される値と同じ意味を持ちます。スクロールバーのスライダーを移動しても、対応するウィジェットは移動しないことに注意してください。wwxscrollcommandyscrollcommand.set.get()

22.1. コールバックScrollbar command

ユーザーがスクロールバーを操作すると、スクロールバーはそのコールバックを呼び出します。この呼び出しの引数は、ユーザーが実行するアクションによって異なります。command

  • ユーザーが 1 つの「ユニット」を左または上に移動するように要求した場合 (たとえば、左または上の矢印のボタン B1 をクリックした場合)、コールバックのパラメータは次のとおりです。

        command(tk.SCROLL, -1, tk.UNITS)
  • ユーザーが 1 ユニットを右または下に移動するように要求した場合、パラメータは次のとおりです。

        command(tk.SCROLL, 1, tk.UNITS)
  • ユーザーが 1 ページ左または上に移動するように要求した場合:

        command(tk.SCROLL, -1, tk.PAGES)
  • ユーザーが 1 ページ右または下に移動するように要求した場合:

        command(tk.SCROLL, 1, tk.PAGES)
  • ユーザーがスライダーを [0, 1] の範囲の値にドラッグすると、0 は左端または上端まで、1 は右端または下端までを意味し、呼び出しは次のようになります。f

        command(tk.MOVETO, f)

これらの呼び出しシーケンスは、Canvas、ListBox、および Text ウィジェットの および メソッドに関連します。ウィジェットにはメソッドがありません。「スクロール項目ウィジェット」を参照してください。.xview().yview()Entry.xview()

22.2. を別のコントロールに接続するScrollbar

以下は、水平および垂直スクロール バーを備えたキャンバスの作成を示すコード スニペットです。このスニペットでは、ウィジェットを想定しています。selfFrame

   self.canv = tk.Canvas(self, width=600, height=400,
        scrollregion=(0, 0, 1200, 800))
    self.canv.grid(row=0, column=0)

    self.scrollY = tk.Scrollbar(self, orient=tk.VERTICAL,
        command=self.canv.yview)
    self.scrollY.grid(row=0, column=1, sticky=tk.N+tk.S)

    self.scrollX = tk.Scrollbar(self, orient=tk.HORIZONTAL,
        command=self.canv.xview)
    self.scrollX.grid(row=1, column=0, sticky=tk.E+tk.W)

    self.canv['xscrollcommand'] = self.scrollX.set
    self.canv['yscrollcommand'] = self.scrollY.set

ノート:

  • 接続は双方向です。キャンバスのオプションは水平スクロールバーのメソッドに接続する必要があり、スクロールバーのオプションはキャンバスのメソッドに接続する必要があります。垂直スクロールバーとキャンバスは同じ相互接続を持っている必要があります。xscrollcommand.setcommand.xview

  • .grid()メソッド のスクロールバーへのオプション呼び出しにより、対応するサイズのキャンバスに収まる程度にのみスクロールバーが強制的に引き伸ばされます。sticky

おすすめ

転載: blog.csdn.net/gongdiwudu/article/details/132602201