今回は、Pythonの標準インストールされている『Tkinter』の配置に関するTipsを書き留めています。標準で入っているため第一の選択肢として挙がってきますが、使用方法が難しかったのですが毎回何とか実装していました。実装して細かくまとめてを繰り返してリファレンスを作成していくしかないですね….
導入
ども!急激に気温が下がってしまい、洗濯物が乾かなくて困っている龍ちゃんです。書く内容がたくさんあるのでブログ執筆を全力で進めています。指先が寒くて執筆が遅くなっちゃうことだけが直近の悩みですね。
最近の仕事は、GitHub Actionsをぶん回しています。待ち時間が半端ないので、その間にブログを執筆していますね。
今回は、Pythonの標準インストールで入っているGUIライブラリ『Tkinter』についての記事になります。ちょっとGUIを作る機会がありまして、苦しんだので記事にまとめておきたいと思います。それでは本題にぬるっと入っていきたい思います。
Tkinter
まずは、基本的な部分から説明をして本題である「画面いっぱい表示」という部分を解説していきたいと思います。もしサンプルだけほしい方は、『ガッ』とスクロールしちゃってください。
キホンのキ
Tkinterでは、3つの方法で配置を行うことができます。WEBベースの解説を付けておきたいと思います。
もし、GUIがリサイズするとなった場合は「pack」と「grid」を使用するのが安牌かと思われます。逆にplaceの使いどころが難しくて困っちゃいますね。
packで画面いっぱいの配置
要素が単一であれば、画面いっぱいに表示されます。fillの単語にはx
,y
,both
,none
の設定を行うことができます。
***.pack(fill="both", expand=True)
適当にフレームを中心に配置するプログラムをおいておきます。
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title("Sample Tkinter App")
self.geometry("400x300")
self.frame1 = PackFrame(self)
self.frame1.pack(fill="both", expand=True)
class PackFrame(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.configure(bg="red")
app = App()
app.mainloop()
App側で配置を行っています。PackFrame
内でページを作成するイメージで使用しています。
gridで画面いっぱいの配置
gridを用いて画面いっぱいに配置を行う場合では、以下のパラメータを調整する必要があります。
***.grid_columnconfigure(0, weight=1)
***.grid_rowconfigure(0, weight=1)
このパラメータの機能としては、『指定した番号を伸ばす縮めるを設定する』になります。weight
に1以上を設定すると伸びます。
以下に単一のフレームをリサイズしても伸びるサンプルを置いておきます。
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title("Sample Tkinter App")
self.geometry("400x300")
self.grid_columnconfigure(0, weight=1)
self.grid_rowconfigure(0, weight=1)
self.frame1 = GridFrame(self)
self.frame1.grid(row=0, column=0, sticky="nsew")
class GridFrame(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.configure(bg="blue")
app = App()
app.mainloop()
App側で配置を行っています。GridFrame
内でページを作成するイメージで使用しています。
終わり
簡易的な内容ですが、基本の内容としては良く忘れがちなのでブログに投稿しておきます。本当は、この後に投稿する内容を投稿したいので、その準備として投稿をしています。年内の投稿がどれぐらいになるかわからないですが、頑張って投稿していきます。
年末って絶妙な緊張感がありますよね。あと数日で今年の仕事は終了するのですが、来年はどんな仕事をするのか楽しみですね。振り返りはまた別に投稿する予定なのでその時にでも( *´艸`)
Pythonの投稿はこちらにまとめておきます。
ではまた~