naritoブログ

【お知らせ】
新ブログができました。今後そちらで更新し、このサイトは更新されません(ウェブサイト自体は残しておきます)
このブログの内容に関してコメントしたい場合は、新ブログのフリースペースに書き込んでください

このブログの内容を新ブログに移行中です。このブログで見つからない記事は、新ブログにありま

Tkinter、gridレイアウトでウィジェットを等分に配置する

約416日前 2017年10月21日7:20
プログラミング関連
Python Tkinter
Tkinterのグリッドレイアウトで、左と右にウィジェットを等分配置したいと思います。
それぞれ幅の50%を使うとしましょう。

普通にgridを使うと、以下のように書けます。

import tkinter as tk
import tkinter.ttk as ttk


class MainFrame(ttk.Frame):
def __init__(self, master=None, **kwargs):
super().__init__(master, **kwargs)
self.create_widgets()

def create_widgets(self):
"""ウィジェットの作成と配置"""
# 左側、言語リストの作成
self.languages = tk.StringVar(value=('Python', 'C', 'Tcl/Tk'))
self.left = tk.Listbox(self, listvariable=self.languages)

# 右側、テキストエリアの作成
self.right = tk.Text(self)

# ウィジェットの配置
self.left.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))
self.right.grid(column=1, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))

# ウィジェットの引き伸ばし設定
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.rowconfigure(0, weight=1)


root = tk.Tk()
app = MainFrame(root)
app.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
root.mainloop()




これは以下のようになります。残念ながら、画面の半分ずつにはなっていません。



この原因は、それぞれのウィジェットにデフォルトの大きさがあるためです。
つまり、今回だとtk.Textの元々の大きさが少し大きいのです。
解決方法はいくつかありますが、最も簡単な方法はuniform引数を指定することです。

self.columnconfigure(0, weight=1, uniform='group1')
self.columnconfigure(1, weight=1, uniform='group1')



うまく等分されています!