このブログでは結構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()今回は自分も理解したかったので主にレイアウトについて解説したいと思います。
まず、この表示された画面を引き延ばしてみてください。
これはウィジェットをどのように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
0 件のコメント:
コメントを投稿