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

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

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

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

Python

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

Q&A

解決済

1回答

3308閲覧

Tkinterのgrid_columnconfigureを使用するが、ウインドウ幅に伸びない

Anon_

総合スコア334

Tkinter

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

Python

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

0グッド

0クリップ

投稿2021/02/05 01:49

編集2021/02/05 07:19

TkinterでGridレイアウトを生成中です。
カラムが3つあるのですが、ウインドウを広げたときにボタン要素が伸びてくれません。

下記の記述を追加しましたが特に変わりませんでした。
何か間違っていますでしょうか。

from tkinter import * from tkinter import ttk import tkinter.filedialog as filedialog root = Tk() root.title("Setting") root.geometry("500x300") root.grid_columnconfigure(0, weight = 1) root.grid_columnconfigure(1, weight = 2) root.grid_columnconfigure(2, weight = 3) frame1 = ttk.Frame(root, padding=10) frame1.grid() btn1 = ttk.Button(frame1, text="ボタン1", width= 10) btn2 = ttk.Button(frame1, text="ボタン2", width= 10) btn3 = ttk.Button(frame1, text="ボタン3", width= 10) #配置 btn1.grid(column=0, row=0,sticky=(W)) btn2.grid(column=1, row=0, sticky=(E,W)) btn3.grid(column=2, row=0, sticky=(E)) root.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

見た感じでは、weight の値指定が間違ってますが、

上記のコードだけでは、フレーム自体のサイズが定まらないので、
伸びる伸びない以前にフレーム自体が見えません。
どのように要素が伸びないのを確認したのかが疑問になってきます。
(コードの省略部分によっては別の問題かもしれない)

  • tkinter, ttk の import
  • root.mainloop()

を含む、コードをコピーして実行が可能な状態で、
且つ問題の現象を再現できる最少のコードを提示してください。


追記: ウィジェットが伸びない問題に関しては、
「レイアウト可能な領域の伸縮」「ウィジェットのサイズの伸縮」の2点があります。

grid() 引数の sticky を調べて見て下さい。.grid(sticky=tk.NSEW)

grid_columnconfigure では、ウィジェットが配置可能な領域の伸縮を決定し、
sticky によりウィジェットがどの方向によるのかが決定されます。


python

1import tkinter as tk 2from tkinter import ttk 3 4root = tk.Tk() 5frame1 = ttk.Frame(root, padding=10) 6frame1.pack(fill=tk.BOTH, expand=tk.YES) # 前提として、親ウィジェットを伸縮可能にしておく 7# ※grid() では位置する場合は、root.grid_[row|column]configure の設定も必要 8 9# root ではなく、frame の grid_configure 10frame1.grid_columnconfigure(0, weight=0) # 左 11frame1.grid_columnconfigure(1, weight=1) # 中央のみ伸縮可能に 12frame1.grid_columnconfigure(2, weight=0) # 右 13 14btn1 = ttk.Button(frame1, text="ボタン1") 15btn2 = ttk.Button(frame1, text="ボタン2") # pack/grid で伸縮可能にする場合、widthは自動調整されるのでサイズ指定は上書きされ無効になります 16btn3 = ttk.Button(frame1, text="ボタン3") 17 18#配置 19btn1.grid(column=0, row=0) 20# sticky オプションの有無を確認してみてください。 21btn2.grid(column=1, row=0, sticky=tk.EW) 22btn3.grid(column=2, row=0) 23 24root.mainloop()

weight について、誤解されてそうな感じだったので追記

python

1import tkinter as tk 2from tkinter import ttk 3 4root = tk.Tk() 5frame1 = ttk.Frame(root, padding=10) 6frame1.pack(fill=tk.BOTH, expand=tk.YES) 7 8# weight の値について、レイアウト可能な領域の割合として考えてみてください 9# 比率で 1:2:1 にする場合。 10frame1.grid_columnconfigure(0, weight=1) 11frame1.grid_columnconfigure(1, weight=2) 12frame1.grid_columnconfigure(2, weight=1) 13 14btn1 = ttk.Button(frame1, text="ボタン1") 15btn2 = ttk.Button(frame1, text="ボタン2") 16btn3 = ttk.Button(frame1, text="ボタン3") 17 18# sticky EW(east-west) 指定で、サイズを左右に伸縮可能にする 19btn1.grid(column=0, row=0, sticky=tk.EW) 20btn2.grid(column=1, row=0, sticky=tk.EW) 21btn3.grid(column=2, row=0, sticky=tk.EW) 22 23root.mainloop()

投稿2021/02/05 05:55

編集2021/02/05 09:00
teamikl

総合スコア8664

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

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

Anon_

2021/02/05 06:09

すみません、関係のない個所などを省いて後ほど全文を掲載いたします。
Anon_

2021/02/05 07:20

記載のコードのみで実行されるものに変更いたしました。 ボタン要素が伸びるようにはどのように記載すべきでしょうか。
teamikl

2021/02/05 08:44 編集

sticky 指定を見たところ、 目的の挙動は、中央のボダンを横幅を伸ばしたいということですか? 問題点は3点、 1) button は frame に配置されているため root ではなく、frame の grid_columnconfigure を設定します。 2) grid_columnconfigure の weight 指定 全ての column を伸縮可能にすると、「レイアウト領域」は伸縮可能でも 「ウィジェットのサイズ」は伸びてないケースもあります。 3) grid() に sticky を設定します(ここは、目的の挙動次第では任意) 直接の原因は (1) の root ではなく frame の grid_columnconfigure という点。 但し、目的のレイアウトにするには (2), (3) の調整が必要そうです。
Anon_

2021/02/08 00:19

frame1.grid_columnconfigure(0, weight=1) は”frame の grid_columnconfigure を設定します。” にはなっていないのですか?
teamikl

2021/02/08 04:38 編集

frame1.grid_columnconfigure(0, weight=1) > は”frame の grid_columnconfigure を設定します。” > にはなっていないのですか? なってますよ。どういった意図の質問ですか? コメント内に書いた(1) の要点は 問題のコードでは「rootに対しての」grid_columnconfigure を設定されてます。 button が配置されてるのは、root ではなく frame1 なので、 frame1 の grid_columnconfigure を設定してください。
Anon_

2021/02/08 07:16

すみません、teamikl様がご記入いただいたコードをこちらのコードと勘違いしておりました。 仰る通りweightについては誤解しておりました。 ようやく理解できましたのでなんとか理想の形にできそうです。 とても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問