まだTkinter始めて試行錯誤していたころに出会ったエラー
_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
そのときのコード
import tkinter as tk
root = tk.Tk() # tkオブジェクトを、rootに格納
root.title("sample_App") # アプリのタイトルを決定
root.geometry("600x400") # アプリ画面の大きさを設定
button_1 = tk.Button(root, text="1", font=("Arial", 20), padx=30, pady=30)
# 親ウィジェット=root ボタンに表示するテキスト=1 フォント="Arial", 18 X方向の内部間隔=30 Y方向の内部間隔=30
button_1.grid(row=0, column=0)
# 設置位置をグリッド指定 1行目 1列目
button_2 = tk.Button(root, text="1", font=("Arial", 20), padx=30, pady=30)
button_2.pack(side=tk.LEFT) # 端から設置(左)
button_3 = tk.Button(root, text="1", font=("Arial", 20), padx=30, pady=30)
button_3.pack(side=tk.RIGHT) # 端から設置(右)
button_4 = tk.Button(root, text="1", font=("Arial", 20), padx=30, pady=30)
button_4.pack(side=tk.BOTTOM) # 端から設置(下)
root.mainloop() #メインループ実行、アプリスタート
調べた結果、ボタン設置の際に .grid と .pack は一緒に使えないらしいです
使う場合は以下のようにフレームで分けます
import tkinter as tk
root = tk.Tk()
root.title("sample_App")
root.geometry("600x400")
frame1 = tk.Frame(root) # frame1をrootに生成
button_1 = tk.Button(frame1, text="1", font=("Arial", 20), padx=30, pady=30)
# 設置場所をrootでなくframe1にする
button_1.grid(row=0, column=0)
frame1.grid(row=0, column=0) # frame1を.gridで設置
frame2 = tk.Frame(root) # frame2をrootに生成
button_2 = tk.Button(frame2, text="1", font=("Arial", 20), padx=30, pady=30)
# 設置場所をrootでなくframe2にする
button_2.pack(side=tk.LEFT)
button_3 = tk.Button(frame2, text="1", font=("Arial", 20), padx=30, pady=30)
button_3.pack(side=tk.RIGHT)
button_4 = tk.Button(frame2, text="1", font=("Arial", 20), padx=30, pady=30)
button_4.pack(side=tk.BOTTOM)
frame2.grid(row=1, column=0) # frame2を.gridで設置
root.mainloop() #メインループ実行、アプリスタート
frame1とframe2の設置も .grid .pack .place を統一しなければなりません
ボタンをフレームの中に入れて、フレームをさらにアプリ画面(root)に設置する感じのイメージです
コメント