PythonのTkinterで画面いっぱいに配置する

Tkinterで画面いっぱいに表示する方法
◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

今回は、Pythonの標準インストールされている『Tkinter』の配置に関するTipsを書き留めています。標準で入っているため第一の選択肢として挙がってきますが、使用方法が難しかったのですが毎回何とか実装していました。実装して細かくまとめてを繰り返してリファレンスを作成していくしかないですね….

導入

ども!急激に気温が下がってしまい、洗濯物が乾かなくて困っている龍ちゃんです。書く内容がたくさんあるのでブログ執筆を全力で進めています。指先が寒くて執筆が遅くなっちゃうことだけが直近の悩みですね。

最近の仕事は、GitHub Actionsをぶん回しています。待ち時間が半端ないので、その間にブログを執筆していますね。

今回は、Pythonの標準インストールで入っているGUIライブラリ『Tkinter』についての記事になります。ちょっとGUIを作る機会がありまして、苦しんだので記事にまとめておきたいと思います。それでは本題にぬるっと入っていきたい思います。

Tkinter

まずは、基本的な部分から説明をして本題である「画面いっぱい表示」という部分を解説していきたいと思います。もしサンプルだけほしい方は、『ガッ』とスクロールしちゃってください。

キホンのキ

Tkinterでは、3つの方法で配置を行うことができます。WEBベースの解説を付けておきたいと思います。

Tkinterの表示メソッド
- pack
- place
- grid

もし、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の投稿はこちらにまとめておきます。

ではまた~

アバター画像
About 龍:Ryu 106 Articles
2022年入社で主にフロントエンドの業務でTailwindと遊ぶ日々。お酒とうまいご飯が好きで、運動がちょっと嫌いなエンジニアです。しゃべれるエンジニアを目指しておしゃべりとブログ執筆に注力中(業務もね)//
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる