TkinterのウィジェットをPackで並べる方法

前提

TkinterのウィジェットをPackをつかい並べたい

Tkinterのウィジェットをキャンバス内のフレーム内に↓の画像のように並べたいのですが

イメージ説明

↓のようになってしまいます。

イメージ説明

Packで並べる方法を教えてください。

またスクロールバーがメインウィンドウの左側についているのですが、これをキャンバスの右側に
付ける方法を教えてください。

該当のソースコード

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("test")
root.geometry("1800x1200+50+100")

cnv = tk.Canvas(root,
width=1500,
height=900,
bg="blue")
cnv.pack(fill=tk.BOTH, expand=tk.YES)
frm_f = tk.Frame(cnv,
width=1500,height=900,
bg='blue')
cnv.create_window(0,0, window=frm_f, anchor=tk.NW)

ybar = tk.Scrollbar(cnv ,orient=tk.VERTICAL)
xbar = tk.Scrollbar(cnv ,orient=tk.HORIZONTAL)

ybar.pack(side=tk.RIGHT, fill=tk.Y)
xbar.pack(side=tk.BOTTOM, fill=tk.X)

ybar.config(command=cnv.yview)
xbar.config(command=cnv.xview)

cnv.config(yscrollcommand=ybar.set, xscrollcommand=xbar.set)
cnv.config(scrollregion=(0, 0, 2200, 4500))

for i in range(1 ,25):

lbl_a = tk.Label(frm_f, width=8, text=str(i) + '行目のLabel', bg='white') lbl_a.pack(anchor=tk.SW) txt_a = tk.Entry(frm_f, width=11, bg='white', justify=tk.RIGHT) txt_a.pack(side=tk.LEFT) txt_a.insert(0, str(i) + '行目のEntry_A') lst_a = tk.Listbox(frm_f, width=25, selectmode="single", bg='white') lst_a.pack(side=tk.LEFT) txt_b = tk.Entry(frm_f, width=60, bg='white') txt_b.pack(side=tk.LEFT) txt_b.insert(0, str(i) + '行目のEntry_B')

root.mainloop()

ソースコード

試したこと

create_windowでは問題ないのですが、packの使い方を学びたいためpackでお願いします。

補足情報(FW/ツールのバージョンなど)

Python 3.10.5
Tkinter 8.6

コメントを投稿

0 コメント