【Part1】Windows95感が消え去ったモダンな見た目のCustom Tkinterに触れてみよう【レイアウト編】

2026年2月26日木曜日

Python tkinter

t f B! P L
 このブログでは結構GUI開発について書いてきたものの最近投稿してなかった気がするので今回新しいシリーズを始めようと思いました。

これまで主に取り扱ってきたwxPythonではなく、CustomTkinterについてです。
従来のTkinterとは違い、よりモダンな見た目になったようです。

解説するのは面倒なので早速サンプルコードを見ていただきます。
※pip installしていない方はしておいてください。


import customtkinter as ctk

app = ctk.CTk()
app.geometry("400x200")

frame = ctk.CTkFrame(app)
frame.pack(expand = True, fill = "both", padx = 20, pady = 20)

framesub = ctk.CTkFrame(frame)
framesub.pack(fill = "x", padx = 10, pady = 10)

text = ctk.CTkEntry(framesub, width = 250)
text.pack(expand = True, fill = "x", side = "left", padx = 5, pady = 5)

button = ctk.CTkButton(framesub, text = "参照", width = 100)
button.pack(side = "left",padx = 5, pady = 5)

text1 = ctk.CTkTextbox(frame)
text1.pack(expand = True, fill = "both", padx = 15, pady = 15)

app.mainloop()

まず、このコードを実行すると以下のような画面が表示されるかと思います。


この時点で分かる通り、とてもモダンな見た目をしていると思います。

今回は自分も理解したかったので主にレイアウトについて解説したいと思います。

まず、この表示された画面を引き延ばしてみてください。


はい、このように上部にあるエントリーボックス(1行のテキストボックス)が横に引き延ばされ、テキストボックスが全体に引き延ばされたのがわかると思います。

これはウィジェットをどのようにpackするかの違いがあります。
ここで、expand=Trueにするか、fill="x"か"y"か"both"にするかの違いが出てきます。

各オプションの役割

expand = True

いたるところにみられるexpand = Trueですが、これはウィンドウが大きくなった際、そのウィジェットが追加の空白スペースを割り当てるかどうかを決めます。

メインのフレームもそうですね。ウィンドウが大きくなったと同時に全体に引き延ばす必要がありますから。

ちなみにこれだけだとあくまで割り当てられるだけで、ウィジェットが真ん中に表示されるだけとなってしまいます。
そのため次に解説するfill=を指定する必要があります。

fill = "x" "y" "both"

その割り当てられたスペースでウィジェットのどの方向に引き延ばすかを指定します。
名前で分かる通り"x"は横方向に、"y"は縦方向に、"both"は両方向に引き延ばします。

たとえば上部のエントリーボックスは"x"を指定しています。
これは、サブフレームには"x"を指定しています。このサブフレームの中にあるエントリーボックスやボタンは縦に引き延ばす必要がないからです。

全体的に広がっているテキストボックスには"both"を指定しています。
テキストボックスは全体に引き延ばす必要がありますから。

padx = [数値], pady = [数値]

これは補足的ですが、ウィジェットの外側にどれくらいの空白を作るかを指定するものです。padxは左右の空白でpadyは上下の空白です。

これを指定しないと余白なくぎっしりとした見づらいGUIが出来上がってしまいます。

side = "left"

途中にあるエントリーボックスとボタンにこのオプションを指定しています。
これは「左から順番に」ウィジェットを設置していくというオプションです。

もちろん"right"にすると右がら順番にウィジェットが設置されていきますし、"bottom"にすれば下から順番にウィジェットが設置されていきます。

デフォルトは"top"で上から順番にウィジェットが配置されていきます。

おわりに

このコードだけで多分CustomTkinterの基礎はいけてると思うので、次回から簡単な「メモ帳」アプリの制作に入っていきたいと思います。

動作環境
Windows 11 24H2
Python 3.12

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ