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

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

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

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

Tkinter

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

Q&A

解決済

1回答

683閲覧

tkinterでボタンなどを指定した場所に配置したい

shield599

総合スコア2

Python 3.x

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

Tkinter

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

0グッド

1クリップ

投稿2023/03/10 05:44

実現したいこと

tkinterでボタンなどを指定した場所に配置したい

前提

tkinterでファイルの読み込み、データを処理するGUIを作製しようと考えています。
pack(side = tk.LEFT)などで指定しても、中央付近にしかボタンなどを配置できなくて困っています。

該当のソースコード

python

1import tkinter as tk 2from tkinter import filedialog 3import pandas as pd 4import glob 5import os 6from tkinter import messagebox 7 8class Application(tk.Frame): 9 def __init__(self, master=None): 10 super().__init__(master) 11 self.master = master 12 self.master.geometry("400x300") 13 self.master.title("解析ソフト") # 追加する行 14 self.pack() 15 self.create_widgets() 16 17 18 def create_widgets(self): 19 # フォルダを指定するためのボタンを作成 20 self.folder_button = tk.Button(self) 21 self.folder_button["text"] = "読み込むフォルダを選択" 22 self.folder_button["command"] = self.select_folder 23 self.folder_button.pack() 24 25 # 保存先を指定するためのボタンを作成 26 self.save_button = tk.Button(self) 27 self.save_button["text"] = "保存先を選択" 28 self.save_button["command"] = self.select_save_folder 29 self.save_button.pack() 30 31 # 保存するファイル名を入力するためのテキストボックスを作成 32 self.file_name_label = tk.Label(self, text="保存するファイル名:") 33 self.file_name_label.pack() 34 self.file_name_entry = tk.Entry(self) 35 self.file_name_entry.pack() 36 37 # 平均回数を入力するためのテキストボックスを作成 38 self.average_label = tk.Label(self, text="平均回数:") 39 self.average_label.pack() 40 self.average_entry = tk.Entry(self) 41 self.average_entry.pack() 42 43 # 実行ボタンを作成 44 self.execute_button = tk.Button(self) 45 self.execute_button["text"] = "ファイル読み込み" 46 self.execute_button["command"] = self.execute 47 self.execute_button.pack() 48 49 def select_folder(self): 50 # ファイル選択ダイアログを表示して、フォルダを選択する 51 self.folder_path = filedialog.askdirectory() 52 print("フォルダが選択されました:", self.folder_path) 53 54 def select_save_folder(self): 55 # ファイル選択ダイアログを表示して、保存先を選択する 56 self.save_folder_path = filedialog.askdirectory() 57 print("保存先が選択されました:", self.save_folder_path) 58 59 def execute(self): 60 # 平均回数を取得する 61 try: 62 ave = int(self.average_entry.get()) 63 except ValueError: 64 print("平均回数には半角数字を入力してください") 65 return 66 67 # フォルダが選択されていることを確認する 68 if not hasattr(self, 'folder_path'): 69 print("フォルダを選択してください") 70 return 71 72 # ファイル名が入力されていることを確認する 73 file_name = self.file_name_entry.get() 74 if file_name == "": 75 print("ファイル名を入力してください") 76 return 77 78 # CSVファイルを 79 all_files = glob.glob(self.folder_path + "/*.csv") 80 if len(all_files) == 0: 81 print("フォルダにCSVファイルがありません") 82 return 83 84#処理部分は関係ないので省いています 85 86if __name__ == '__main__': 87 root = tk.Tk() 88 app = Application(master=root) 89 app.mainloop()

試したこと

widgetの配置について、下記のページなどを参照し、packでの配置(expand = True, fill = tk.X)などを試したのですが、幅が一番テキストの長い「folder_button」になっており、
大きさをself.master.geometry("400x300")で設定してもほぼ余白になってしまいます。

https://imagingsolution.net/program/python/tkinter/widget_layout_pack/

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

melian

2023/03/10 05:58

一応、Frame を pack する際に side='left' を指定すれば、その後に作成するウィジェットは左側に寄せられます。 def __init__(self, master=None):    :  self.pack(side='left')
shield599

2023/03/10 06:21 編集

回答ありがとうございます。 Frameをpackする際に指定ができると知らなかったので、勉強になりました。
guest

回答1

0

ベストアンサー

提示サイトを参考して

  • selfではなくself.masterを指定
  • anchor=tk.Wを指定

でとりあえず左寄せになります。

Python

1 self.folder_button = tk.Button(self.master) 2 self.folder_button["text"] = "読み込むフォルダを選択" 3 self.folder_button["command"] = self.select_folder 4 self.folder_button.pack(anchor=tk.W)

イメージ説明

投稿2023/03/10 05:59

can110

総合スコア38230

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

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

shield599

2023/03/10 06:19

回答ありがとうございます。 masterの記述を見逃していました。 self.masterを指定を指定すると想定通りの配置にすることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問