前提・実現したいこと
tkinterでGUIの開発をしています。
9つのボタンを等間隔に配置した行を複数作りたいのですが、なぜか2列目から添付画像のように配置が崩れてしまいます。
エラーメッセージは出ていません。
1行目では成功しているため、2行目から配置が崩れる理由がよく分かりません。
どなたか詳しい方、対処法を教えていただきたいです。よろしくお願いします。
該当のソースコード
python
1import tkinter as tk 2import tkinter.ttk as ttk 3 4root = tk.Tk() 5pad = {"padx" : 5, "pady" : 5} 6we = tk.W + tk.E 7w = tk.W 8 9 10# フレーム配置 11fra0 = tk.Frame(root, cnf=pad, height=10) 12fra0.pack(expand=True, fill="x", padx=10) 13fra0.columnconfigure([1, 3, 5], weight=1) 14fra0.rowconfigure([0, 1, 2], weight=1) 15fra0.pack_propagate(0) 16 17fra = tk.Frame(root, cnf=pad, height=10) 18fra.pack(expand=True, fill="x", padx=10) 19fra.columnconfigure([1, 3, 5], weight=1) 20fra.rowconfigure([0, 1, 2], weight=1) 21fra.pack_propagate(0) 22 23fra_2 = tk.Frame(root, cnf=pad, height=10) 24fra_2.pack(expand=True, fill="x", padx=10) 25fra_2.columnconfigure([1, 3, 5], weight=1) 26fra_2.rowconfigure([0, 1, 2], weight=1) 27fra_2.pack_propagate(0) 28 29fra_3 = tk.Frame(root, cnf=pad, height=10) 30fra_3.pack(expand=True, fill="x", padx=10) 31fra_3.columnconfigure([1, 3, 5], weight=1) 32fra_3.rowconfigure([0, 1, 2], weight=1) 33fra_3.pack_propagate(0) 34 35fra2 = tk.Frame(root, cnf=pad, height=10) 36fra2.pack(expand=True, fill="x", padx=10) 37fra2.columnconfigure([1, 3, 5], weight=1) 38fra2.rowconfigure([0, 1, 2], weight=1) 39fra2.pack_propagete(0) 40 41 42StyCol = [] 43Col = [] 44Com = [] 45Btn = [] 46 47for i in range(18): 48 Col.append("red") 49 StyCol.append("ReColor.TButton") 50 51l = len(Col) 52print("l = " + str(l)) 53 54# ラベル配置 55lbl1 = tk.Label(fra0, text="基本色:") 56lbl1.grid(row=0, column=0) 57 58 59lbl2_void = tk.Label(fra2, text="") 60lbl2_void.grid(row=0, column=0) 61lbl2 = tk.Label(fra2, text="作成した色:") 62lbl2.grid(row=1, column=0) 63 64 65# ボタン配置 66for n in range(l): 67 print(Col[n]) 68 style = ttk.Style() 69 style.theme_use("default") 70 style.configure("%s" % StyCol[n], font=("", "", ""), background="%s" % Col[n], foreground="white", borderwidth=3, relief="groove", bordercolor="gray94") 71 style.map("%s" % StyCol[n], background=[("pressed", "!disabled", "%s" % Col[n]), ("active", "%s" % Col[n])], foreground=[("pressed", "white"), ("active", "white")]) 72 style.layout("%s" % StyCol[n], 73 [('TButton.border', {'sticky': 'nswe', 'border': '1', 'children': [ 74 #('Button.focus', {'sticky': 'nswe', 'children': [ 75 ('Button.padding', {'sticky': 'nswe', 'children': [ 76 ('Button.label', {'sticky': 'nswe'})]}) 77 ]}) 78 #]}) 79 ]) 80 if 0 <= n <= 8: 81 btn = ttk.Button(fra, text="", style="%s" % StyCol[n]) 82 btn.grid(row=0, column=n, cnf=pad, sticky=w, ipadx=7, ipady=7) 83 Btn.append(btn) 84 elif 9 <= n <= 16: 85 btn = ttk.Button(fra_2, text="", style="%s" % StyCol[n]) 86 btn.grid(row=1, column=n-9, cnf=pad, sticky=w, ipadx=7, ipady=7) 87 Btn.append(btn) 88 elif 17 <= n <= 24: 89 btn = ttk.Button(fra_3, text="", style="%s" % StyCol[n]) 90 btn.grid(row=2, column=n-17, cnf=pad, sticky=w, ipadx=7, ipady=7) 91 92 93root.mainloop() 94
補足情報(FW/ツールのバージョンなど)
Windows10
Python 3.8.3
tkinter 8.6.10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/01 07:37