こんにちは!ゆーや(@yuyamanm118712)です。
こちらのページでは完全独学でWebプログラマとなった私が
デスクトップアプリには必須!!TkinterでToplevel使ったサブウィンドウの作成方法を詳しく紹介します!
Tkinterの基本的な使い方は以下の記事を見てね!
Toplevelウィジェットは、親ウィンドウとは別に独立したウィンドウを提供します!
例えば、設定画面やポップアップウィンドウなどに使われます。
この記事を通して、Toplevelは使いこなせるようにしておきましょう!
アプリ制作楽しいですよね!
そんなプログラミングに楽しさを覚えたあなた!
勉強し始めて、IT業界に興味があるけど、自信がない。
僕も同じでした。なので、一人でコツコツ、1年間も独学で勉強…
そのあと、一人で転職活動…
心細かったのを覚えています…
しかし、時代は変わり、
プログラミングを学び、転職をサポートしてくれるスクールがあります!
その名も…
初心者から経験者まで対応できる300以上の講座ラインナップで、スキルアップを目指す方に最適!プロ講師による丁寧な「個人レッスン」で、あなたに合わせた指導を受けられます。
- オンライン or 対面で選べる受講スタイル:あなたのライフスタイルに合わせて柔軟に受講可能!
- 実践重視のカリキュラム:現場経験豊富な講師陣が指導。学んだスキルをそのまま活かせる即戦力を養成。
- 年間1500社の企業研修実績で、ビジネスシーンに即した指導内容が魅力!
就職・転職サポートも充実し、受講中はもちろん卒業後も安心。まずは無料体験で、その質の高さを体感してください!
「完全独学Python」で学習しているあなたなら大丈夫!
僕みたいにリモートワークで自由な生活を手に入れよう!
まずは無料体験・カウンセリングを受けてみよう!
もちろん、Pythonコースもあるよ!
この記事を読むと
- Tkinterでサブウィンドウが作成できる!
- TkinterのToplevelの基本的な使い方が理解できる!!
- TkinterのToplevelのオプションについて理解できる!
Toplevel(サブウィンドウ)の基本
Toplevel(サブウィンドウ)作成までのサンプルコード
import tkinter as tk
# メインウィンドウの作成
root = tk.Tk()
root.title("Main Window")
root.geometry("400x300")
def open_toplevel():
# 新しいToplevelウィンドウの作成
toplevel = tk.Toplevel(root)
toplevel.title("Toplevel Window")
toplevel.geometry("300x200")
# ラベルの追加
label = tk.Label(toplevel, text="これはToplevelウィンドウです")
label.pack(pady=20)
# 閉じるボタンの追加
close_button = tk.Button(toplevel, text="閉じる", command=toplevel.destroy)
close_button.pack(pady=10)
# ボタンの作成
open_button = tk.Button(root, text="Toplevelを開く", command=open_toplevel)
open_button.pack(pady=20)
# メインループの開始
root.mainloop()
ボタン押下前
ボタン押下後
ボタンを押すと、サブウィンドウが表示されるね!
サブウィンドウにも、メインウィンドウと同じく「タイトルの設定」や「ウィジェットの配置」などができる!
command=toplevel.destroyでサブウィンドウを閉じることもできるよ!
Toplevelの基本オプション
ウィンドウのサイズと位置を指定(geometry)
import tkinter as tk
# メインウィンドウの作成
root = tk.Tk()
root.title("Main Window")
root.geometry("400x300")
def open_toplevel():
# 新しいToplevelウィンドウの作成
toplevel = tk.Toplevel(root)
toplevel.title("Toplevel Window")
toplevel.geometry("300x200+500+500")
# ラベルの追加
label = tk.Label(toplevel, text="これはToplevelウィンドウです")
label.pack(pady=20)
# 閉じるボタンの追加
close_button = tk.Button(toplevel, text="閉じる", command=toplevel.destroy)
close_button.pack(pady=10)
# ボタンの作成
open_button = tk.Button(root, text="Toplevelを開く", command=open_toplevel)
open_button.pack(pady=20)
# メインループの開始
root.mainloop()
この例(geometry(“300×200+500+500”))では、幅300ピクセル、高さ200ピクセル、左上の位置が(100, 100)の位置にウィンドウが配置されるよ!
少し特殊な書き方だけど覚えておこう!
ウィンドウのサイズ変更の可否を設定(resizable)
import tkinter as tk
# メインウィンドウの作成
root = tk.Tk()
root.title("Main Window")
root.geometry("400x300")
def open_toplevel():
# 新しいToplevelウィンドウの作成
toplevel = tk.Toplevel(root)
toplevel.title("Toplevel Window")
toplevel.geometry("300x200")
toplevel.resizable(False, False)
# ラベルの追加
label = tk.Label(toplevel, text="これはToplevelウィンドウです")
label.pack(pady=20)
# 閉じるボタンの追加
close_button = tk.Button(toplevel, text="閉じる", command=toplevel.destroy)
close_button.pack(pady=10)
# ボタンの作成
open_button = tk.Button(root, text="Toplevelを開く", command=open_toplevel)
open_button.pack(pady=20)
# メインループの開始
root.mainloop()
サブウィンドウの端をドラッグして、サブウィンドウのサイズを変更しようとしてみましょう!
出来ないことがわかると思います!
ウィジェットの配置方法の中でもplaceなどと相性が良さそうですね!
placeについては下記の記事を見てね!
親ウィンドウの前面に表示されるモーダルウィンドウを作成(transient)
import tkinter as tk
root = tk.Tk()
root.title("Main Window")
toplevel = tk.Toplevel(root)
toplevel.title("Modal Window")
toplevel.transient(root) # Toplevelウィンドウを親ウィンドウに設定
root.mainloop()
サブウィンドウが前面に表示されたね!
違いが分かりにくい人は、toplevel.transient(root)をコメントアウトしてみよう!
他のウィンドウにアクセス禁止(grab_set)
import tkinter as tk
# メインウィンドウの作成
root = tk.Tk()
root.title("Main Window")
root.geometry("400x300")
def open_toplevel():
# 新しいToplevelウィンドウの作成
toplevel = tk.Toplevel(root)
toplevel.title("Toplevel Window")
toplevel.geometry("300x200")
toplevel.grab_set()
# ラベルの追加
label = tk.Label(toplevel, text="これはToplevelウィンドウです")
label.pack(pady=20)
# 閉じるボタンの追加
close_button = tk.Button(toplevel, text="閉じる", command=toplevel.destroy)
close_button.pack(pady=10)
# ボタンの作成
open_button = tk.Button(root, text="Toplevelを開く", command=open_toplevel)
open_button.pack(pady=20)
# メインループの開始
root.mainloop()
メインウィンドウのボタンを押してみよう!
ボタンが効かないことがわかるよ!
(逆に他の時はボタンが押せてしまうことに注意!)
まとめ
本記事では、Toplevelを使って、Tkinterでサブウィンドウを表示する方法を紹介しました!
ポイントは以下の7つです!
① Tkinterでサブウィンドウを表示するには「Canvas(キャンバス)」を使う
② 「geometry」はウィンドウのサイズと位置を指定できる!
③ 「resizable」はウィンドウのサイズ変更の可否を設定できる!
④ 「transient」は親ウィンドウの前面に表示されるモーダルウィンドウを作成できる!
⑤ 「grab_set」は他のウィンドウにアクセス禁止できる!
まとめの内容を見て、もう頭に浮かべば完璧!
コメント