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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

Q&A

解決済

1回答

192閲覧

【python】tkinterでのレイアウトについて

kirinriki_to

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

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

0グッド

0クリップ

投稿2023/05/26 06:56

編集2023/05/26 06:57

実現したいこと

Label、Treeview、Frame(Button、Button、Button)の要素を持つGUIを作成しています。
以下のようにレイアウトしたいと思っています。
・上からラベル(左寄せ)、ツリービュー(真ん中寄せ)、ボタン軍(右寄せ)としたい
・ツリービューにスクロールバーをつける
イメージ説明

発生している問題

FrameをBOTTOMに配置しているのですが、Treeviewの隣に配置されてしまいます。
イメージ説明

TreviewとFrameの右端を合わせるにはどう定義したらよいのでしょうか。

該当のソースコード

python

1class AnnouncementEditScreen(tk.Frame): 2 def __init__(self, master, appProcess): 3 super().__init__(master) 4 self.appProcess = appProcess 5 self.master = master 6 7 # タイトルの変更 8 self.master.title(conf.get('SCREEN_MESSAGE', 'TITLE') + ' ' + conf.get('SCREEN_MESSAGE', 'ANNOUNCEMENT_EDIT')) 9 10 # 外枠の定義 11 self.configure(padx=20, pady=20, bg=conf.get('MENU', 'BG_COLOR')) 12 13 # ラベルの定義 14 self.announce_label = Label(self, text=conf.get('SCREEN_MESSAGE', 'ANNOUNCEMENT_EDIT'), font=(conf.get('BUTTON', 'BUTTON_FONT'), 15), bg=conf.get('MENU', 'BG_COLOR')) 15 16 # ボタンスタイル定義 17 style_announce = ttk.Style() 18 style_announce.configure('announce1.TButton', font=(conf.get('BUTTON', 'BUTTON_FONT'), 15, ''), background=conf.get('BUTTON', 'BUTTON_COLOR')) 19 style_announce.configure("announce2.TButton", font=(conf.get('BUTTON', 'BUTTON_FONT'), 15, ''), background=conf.get('BUTTON', 'BUTTON_COLOR_2')) 20 21 # ボタンおまとめフレーム 22 button_container = tk.Frame(self, bg=conf.get('MENU', 'BG_COLOR')) 23 24 # ボタン定義(追加) 25 self.announce_button_register = ttk.Button( 26 button_container, 27 text=conf.get('BUTTON', 'BUTTON_TEXT_ADDITION'), 28 style='announce1.TButton', 29 command="") 30 31 # ボタン定義(削除) 32 self.announce_button_delete = ttk.Button( 33 button_container, 34 text=conf.get('BUTTON', 'BUTTON_TEXT_DELETE'), 35 style='announce2.TButton', 36 command="") 37 38 # ボタン定義(キャンセル) 39 self.announce_button_cancel = ttk.Button( 40 button_container, 41 text=conf.get('BUTTON', 'BUTTON_TEXT_CANCEL_KANA'), 42 style='announce2.TButton', 43 command=quit) 44 45 # ツリービューのスタイル 46 style_announce = ttk.Style() 47 style_announce.configure('announce.Treeview', font=(conf.get('BUTTON', 'BUTTON_FONT'), 13)) 48 style_announce.configure('Treeview.Heading', background=conf.get('MENU', 'TREEVIEW_COLOR'), font=(conf.get('BUTTON', 'BUTTON_FONT'), 14)) 49 50 # ツリービューの作成 51 self.announce_tree = ttk.Treeview(self, style='announce.Treeview') 52 53 self.announce_tree["columns"] = (1, 2, 3, 4, 5) 54 self.announce_tree["show"] = "headings" 55 self.announce_tree.column(1, width=120) 56 self.announce_tree.column(2, width=300) 57 self.announce_tree.column(3, width=600) 58 self.announce_tree.column(4, width=150) 59 self.announce_tree.column(5, width=120) 60 self.announce_tree.heading(1, text="作成日") 61 self.announce_tree.heading(2, text="件名") 62 self.announce_tree.heading(3, text="詳細") 63 self.announce_tree.heading(4, text="記載部署") 64 self.announce_tree.heading(5, text="掲載終了日") 65 self.announce_tree.bind("<Double-1>", "") 66 67 # スクロールバーの作成 68 scrollbar = ttk.Scrollbar(self, orient="vertical", command=self.announce_tree.yview) 69 70 # Jsonファイルを読み込み 71 with open(conf.get('PATH', 'PATH_ANNOUNCE_JSON'), "r") as jfile : 72 announce_json = json.load(jfile) 73 74 for key in announce_json.keys(): 75 item = announce_json[key] 76 77 announcement_date = item['n_announcement_date'] 78 title = item['n_title'] 79 content = item['n_content'] 80 described_division = item['n_division'] 81 posting_end_date = item['n_end_date'] 82 83 data = (announcement_date, title, content, described_division, posting_end_date) 84 85 self.announce_tree.insert("", "end", values=data) 86 87 # 各要素の表示 88 self.announce_label.pack(side=tk.TOP, anchor=tk.W) 89 self.announce_tree.pack(side=tk.LEFT, pady=10, fill=tk.BOTH, expand=True) 90 button_container.pack(side=tk.BOTTOM, pady=10) 91 self.announce_button_cancel.pack(side=tk.RIGHT, padx=5) 92 self.announce_button_delete.pack(side=tk.RIGHT, padx=5) 93 self.announce_button_register.pack(side=tk.RIGHT, padx=5) 94 95 scrollbar.pack(side=tk.RIGHT, fill=tk.Y) 96 97 # スクロールバーの高さをツリービューに合わせる 98 scrollbar.configure(command=self.announce_tree.yview) 99 self.announce_tree.configure(yscrollcommand=scrollbar.set)

試したこと

TreeviewをLEFT指定しないとスクロールバーが下部に設置されてしまうので、TreeViewにLeftは必須でした。
イメージ説明

補足情報(FW/ツールのバージョンなど)

python3.11

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

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

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

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

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

guest

回答1

0

自己解決

自己解決

ツリービュー、スクロールバーのおまとめフレームを作成し配置したところ、実現できました。

python

1 # ツリービューおまとめフレーム 2 treeview_contener = tk.Frame(self, bg=conf.get('MENU', 'BG_COLOR')) 3 4 # ツリービューの作成 5 self.announce_tree = ttk.Treeview(treeview_contener, style='announce.Treeview') 6 7 self.announce_tree["columns"] = (1, 2, 3, 4, 5) 8 self.announce_tree["show"] = "headings" 9 self.announce_tree.column(1, width=120) 10 self.announce_tree.column(2, width=300) 11 self.announce_tree.column(3, width=600) 12 self.announce_tree.column(4, width=150) 13 self.announce_tree.column(5, width=120) 14 self.announce_tree.heading(1, text="作成日") 15 self.announce_tree.heading(2, text="件名") 16 self.announce_tree.heading(3, text="詳細") 17 self.announce_tree.heading(4, text="記載部署") 18 self.announce_tree.heading(5, text="掲載終了日") 19 self.announce_tree.bind("<Double-1>", "") 20 21 22 # スクロールバーの作成 23 scrollbar = ttk.Scrollbar(treeview_contener, orient="vertical", command=self.announce_tree.yview)

投稿2023/06/02 00:16

kirinriki_to

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問