二つのフレームを、ボタン押下で行き来する=画面遷移しあう作りのコーディングを行いました。
以下がコード実行時の画面(frmMainとfrmRunMenuというフレームをいききするイメージ)です。
質問
両方のフレームで ボタンが左隅に貼り付いてしまっている状況を克服したいです、
希望は フレームを埋め尽くすように ボタンが配置されることです。如何したらよろしいでしょうか?
試したこと
現在、画面(root)への フレームの適用方法は grid を採用しています。
過去に fill=tk.BOTH, expand=Trueをオプション指定した pack の手法を利用したことがあったので 今回もそちらの手法を試したのですが
frmRunMenuのフレーム側に現れるべきボタンが frmMainのフレーム下段に現れてしまう 状況でした....
初歩的なことで申し訳ありませんが、ご教示をよろしくお願いします。
python
1# tkinterのインポート 2import tkinter as tk 3import tkinter.ttk as ttk 4import math 5import os 6from tkinter import filedialog 7################################################################################# 8# # 9# 画面生成 # 10# # 11# # 12################################################################################# 13def resource_path(relative_path): 14 try: 15 # PyInstaller creates a temp folder and stores path in _MEIPASS 16 base_path = sys._MEIPASS 17 except Exception: 18 base_path = os.path.abspath(".") 19 20 return os.path.join(base_path, relative_path) 21 22 23def adjust_windowsize(self): 24 ww = self.winfo_screenwidth() 25 wh = self.winfo_screenheight() 26 27 lw = math.ceil(ww * 0.208) 28 lh = math.ceil(wh * 0.277) 29 30 root.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2))) 31 32################################################################################# 33# # 34# フレーム生成 # 35# # 36# # 37################################################################################# 38def generate_frm(root): 39 40 def change_app(window): 41 window.tkraise() 42 43 def openFileDialog(): 44 file = filedialog.askopenfilename() 45 change_app(frmMain) 46 47 48 # メインメニュー用フレーム設置 49 frmMain = ttk.Frame(root) 50 frmMain.grid(row=0, column=0, sticky=tk.E + tk.W + tk.N + tk.S) 51 52 # メインメニューにボタン配置 53 btn_RunMenu = tk.Button(frmMain, text = "実行メニュー", font=("",0,"normal","roman","normal"), command=lambda: change_app(frmRunMenu)) 54 btn_RunMenu.pack(fill = tk.BOTH, expand=True) 55 btn_RunMenu.focus_set() 56 57 btn_SettingMenu = tk.Button(frmMain, text = "終了", font=("",0,"normal","roman","normal"), command=root.destroy) 58 btn_SettingMenu.pack(fill = tk.BOTH, expand=True) 59 60 61 62 # 実行メニュー用フレーム設置 63 frmRunMenu = ttk.Frame(root) 64 frmRunMenu.grid(row=0, column=0, sticky=tk.E + tk.W + tk.N + tk.S) 65 66 # 実行メニューにボタン配置 67 btn_FileDialog = tk.Button(frmRunMenu, text = "ファイルダイアログ", font=("",0,"normal","roman","normal"), command=openFileDialog) 68 btn_FileDialog.pack(fill = tk.BOTH, expand=True) 69 btn_FileDialog.focus_set() 70 71 btn_ReturnMenu = tk.Button(frmRunMenu, text = "メニューへ戻る", font=("",0,"normal","roman","normal"), command=lambda: change_app(frmMain)) 72 btn_ReturnMenu.pack(fill = tk.BOTH, expand=True) 73 btn_ReturnMenu.focus_set() 74 75 76 # 起動時メインのフレームを前面に 77 frmMain.tkraise() 78 79 80 81 82if __name__ == "__main__": 83 # ウインドウの作成 84 root = tk.Tk() 85 86 #フォームサイズを実行端末から導き、ド真中に配置表示 87 adjust_windowsize(root) 88 89 #タイトルを指定 90 root.title("Tkiinterの勉強") 91 92 #フォームの最大化、×ボタン操作を無効化 93 root.resizable(0,0) 94 root.protocol('WM_DELETE_WINDOW', (lambda: 'pass')()) 95 96 # カーソル変更 97 root["cursor"] = "hand2" 98 99 generate_frm(root) 100 101 root.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。