前提
帳票を作っており、タイトルバー(表題)と内容(名称)があり、縦スクロールと横スクロールをつけたいです。
実現したいこと
縦スクロールではタイトルバーはスクロールせず内容の表だけスクロールし、
横スクロールではタイトルバーと内容の表が同じくスクロールする表を作りたい。
ここに実現したいことを箇条書きで書いてください。
発生している問題・エラーメッセージ
↓のコードだとキャンバスの内容が小さくなってしまいます。またスクロールしても横スクロールは問題なくても、縦スクロールはタイトルと
同じくスクロールし、下にスクロールするとタイトルが隠れてしまいます。
また、タイトルと内容を別のフレームに分けると縦の位置が合わないのと、横スクロールとずれるため、同じフレーム内にgridで配置しています
該当のソースコード
import tkinter as tk root = tk.Tk() root.title("test") root.geometry("1200x1200") frm_a = tk.Frame(root, width=900 ,height=900) frm_a.grid(row=0, column=0) cnv = tk.Canvas(frm_a,width=900,height=900,bg="blue",relief=tk.FLAT) cnv.grid(row=0,column=0) frm_b = tk.Frame(cnv, width=900 ,height=900) cnv.create_window(0, 0, window=frm_b, 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, 1200, 4000)) # タイトル lbl_s = tk.Label(frm_b ,text='タイトル1',width=10,height=2) lbl_s.grid(row=1,column=1) lbl_t = tk.Label(frm_b,text='タイトル2',width=10,height=2) lbl_t.grid(row=1,column=3) lbl_u = tk.Label(frm_b,text='タイトル3',width=10,height=2) lbl_u.grid(row=1,column=5) lbl_v = tk.Label(frm_b,text='タイトル4',width=10,height=2) lbl_v.grid(row=1,column=7) # 内容 row_pos = 3 for i in range(1,30): lbl_aa = tk.Label(frm_b,width=10,height=2,text=str(i),relief=tk.FLAT) lbl_aa.grid(row=row_pos,column=1) txt_aa = tk.Entry(frm_b,width=10) txt_aa.grid(row=row_pos,column=3) lst_aa = tk.Listbox(frm_b,width=10,selectmode="single",height=2) lst_aa.grid(row=row_pos,column=5) txt_ac = tk.Entry(frm_b,width=10) txt_ac.grid(row=row_pos,column=7) row_pos += 2 # 罫線 for i in range(0,8,2): v_line = ttk.Separator(frm_b, orient="vertical", style="blue.TSeparator") v_line.grid(row=1, column=i, rowspan=120, sticky="nsew") for i in range(0,60,2): h_line = ttk.Separator(frm_b, orient="horizontal", style="blue.TSeparator") h_line.grid(row=i, column=1, columnspan=8, sticky="nsew") frm_c = tk.Frame(root,width=900,height=40,bg='blue') frm_c.grid(row=10, column=0) root.mainloop()
試したこと
cnv.grid(row=0,column=0)
を
cnv.pack(fill=tk.BOTH, expand=tk.YES)
に変えたり
ybar.pacなどをgridに変えましたが、表示が大きくなりません。
補足情報(FW/ツールのバージョンなど)
Python 3.10.5
Tkinter 8.6
よろしくお願いします。
0 コメント