C#では、SplitContainerを使ってPictureBoxのサイズなどを変更していたのですが、tkinterでは、このSplitContainerに相当するものがPanedWindowとなります。
PanedWindowのサンプルプログラムを以下示します。
(実行画面)
仕切り線の移動 → |
(プログラム)
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master = None):
super().__init__(master)
self.master.geometry("300x200") # ウィンドウサイズ(幅x高さ)
# PanedWindowの作成
paned_window = tk.PanedWindow(self.master)
# フレームの作成
frame1 = tk.Frame(paned_window, width = 100, bg = "red")
frame2 = tk.Frame(paned_window, width = 100, bg = "green")
# フレームをPanedWindowに追加
paned_window.add(frame1)
paned_window.add(frame2)
paned_window.pack(expand = True, fill = tk.BOTH)
if __name__ == "__main__":
root = tk.Tk()
app = Application(master = root)
app.mainloop()
PanedWindowはC#のSplitContainerと似てはいるのですが、異なる部分もあります。
- C#のSplitContainerでは、最初からPanel1,Panel2が配置されていますが、PanedWindowには何も配置されていない。(自分でウィジェットをPanedWindowに追加する必要があります。)
- PanedWindowにはFrame以外にもLabelやButtonなどのウィジェットが配置できる。
- ウィジェットを追加すると、ウィジェットとウィジェットの間に仕切り線(sash)が追加される。
- PanedWindowには3つ以上のウィジェットを追加できる。
- ウィンドウをリサイズした時に、一番右(もしくは一番下)のウィジェットのみがリサイズされる。
オプション
オプション名 | 説明 |
background | 通常時(クリックされていないとき)の背景色を指定します。(bgと同じ) |
bd | 外枠の線の太さを指定します。 ただし、初期状態では枠線が表示されていないため、reliefで枠線のスタイルを指定する必要があります。(borderwidthと同じ) |
bg | backgroundと同じ |
borderwidth | bdと同じ |
cursor | ウィジェット上にマウスポインタがある際のカーソルの種類を指定します。 (参考)https://tkdocs.com/shipman/cursors.html |
handlepad | ハンドル(四角いマーク)の位置を指定します。 |
handlesize | ハンドル(四角いマーク)の大きさを指定しますs。 |
height | ウィジェットの高さを指定します。 |
opaqueresize | 仕切り線(sash)を移動中に表示を更新する場合はTrue、更新しない場合はFalseを指定します。 【初期値】True |
orient | ウィジェットを横に並べる場合は tk.HORIZONTAL、縦に並べる場合は tk.VERTICALを指定します。 【初期値】tk.HORIZONTAL |
sashpad | 仕切り線(sash)の両側に追加する隙間の大きさを指定します。 |
sashrelief | 仕切り線(sash)のスタイルを指定します。 【設定値】tk.RAISED, tk.GROOVE, tk.SUNKEN, tk.RIDGE, tk.FLAT 【初期値】tk.FLAT(枠線なし) |
sashwidth | 仕切り線(sash)の幅を指定します。 【初期値】3 |
showhandle | ハンドルと呼ばれる四角い印を仕切り線上に表示する場合はTrue、表示しない場合はFalseを指定します。 【初期値】False |
width | ウィジェットの幅を指定します。 |
メソッド
メソッド | 説明 |
add(child[, option=value] …) | ウィジェットをPanedWindowに追加します。 |
forget(child) | 追加したウィジェットを削除します。 |
identify(x, y) | |
panecget(child, option) | |
paneconfig(child, option=value, …) | |
panes() | PanedWindowに追加されているウィジェットのリストを取得します。 |
remove(child) |
追加したウィジェットを削除します。 |
sash_coord(index) |
仕切り線(sash)の位置を取得します。 |
sash_place(index, x, y) | 仕切り線(sash)の位置を指定します。 indexは仕切り線の順番0, 1, 2・・・ |