質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1052閲覧

Tkinter 配置したボタンを フレーム上に上下左右に間延びさせて貼り付けたい

saya24

総合スコア247

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/16 09:17

編集2021/10/16 12:49

二つのフレームを、ボタン押下で行き来する=画面遷移しあう作りのコーディングを行いました。
以下がコード実行時の画面(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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

フレームの基盤=画面(root)に対し、以下コーディングを行うことが重要と 問題の要因を特定しました。

python

1#rootのグリッドを1X1にする 2root.grid_rowconfigure(0, weight=1) 3root.grid_columnconfigure(0, weight=1)

お騒がせしました

投稿2021/10/17 00:42

saya24

総合スコア247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問