ここでは、Tkinterにおけるウィンドウのサイズを固定する、拡大/縮小の有効・無効にする方法についてまとめています。
この記事の対象
ウィンドウのサイズを固定
import tkinter as tk
root = tk.Tk()
root.title("固定")
root.geometry("400x300")
# サイズを固定
root.resizable(False, False)
root.mainloop()
サイズを固定する場合は「***.resizable(False,False)」になります。幅と高さをFalseにすることで固定します。
ウィンドウの縮小のみ禁止
import tkinter as tk
def disable_resize(event):
if event.width < root.winfo_reqwidth() or event.height < root.winfo_reqheight():
root.geometry(f"{root.winfo_reqwidth()}x{root.winfo_reqheight()}")
root = tk.Tk()
root.title("縮小禁止")
root.geometry("400x300")
# 縮小を禁止
root.bind("<Configure>", disable_resize)
root.mainloop()
ウィンドウの縮小だけを禁止する場合は幅と高さを取得し、次にEventを取得し比較することで縮小だけを禁止するようにしています。
「winfo_reqwidth」はウィンドウの幅、「winfo_reqheight」はウィンドウの高さを取得しています。
Eventではリサイズされた値を取得しています。
関数の呼び出しは「bind」を用いることでウィンドウのイベントが発生したら行っています。
ウィンドウの拡大のみ禁止
import tkinter as tk
def disable_expand(event):
if event.width > root.winfo_reqwidth() or event.height > root.winfo_reqheight():
root.geometry(f"{root.winfo_reqwidth()}x{root.winfo_reqheight()}")
root = tk.Tk()
root.title("拡大禁止")
root.geometry("400x300")
#拡大を禁止
root.bind("<Configure>", disable_expand)
root.mainloop()
縮小のみの時と同じでbindでイベントを取得して、サイズを比較して拡大できないようにしています。
【補足】wiget.bindとは
基本的な型
widget.bind(sequence, callback, add=None)
「bind」メソッドは、ウィジェットに対してイベントとそれに関連する関数(イベントハンドラ)を結び付けるために使用されます。また、イベントが発生した時に実行されるコードを定義することができます。
項目 | 内容 |
widget | イベントをバインドする対象のウィジェット |
sequence | イベントの発生条件を指定する文字列。マウスボタンのクリック、ウィンドウのリサイズなどがある |
callback | イベントが発生した時に呼び出される関数 |
add | イベントの追加バインドを行うかどうかを指定するフラグ。新しいバインドが既存のバインドよりも前に配置される。デフォルトではNone |
主なSequence一覧
<Button-1> または <1> | マウスの左クリック |
<Button-3> または <3> | マウスの右クリック |
<ButtonRelease-1> | マウスの左ボタンを離した時 |
<ButtonRelease-3> | マウスの右ボタンを離した時 |
<Return> | キーボードのリターンキーが押された |
<KeyPress-H> | キーボードのhキーが押された |
<Control-c> | Ctrlキーを押しながらキーボードのcキーが押された |
<Shift-c> | Shiftキーを押しながらキーボードのcキーが押された |
<Alt-c> | Altキーを押しながらキーボードのcキーが押された |
<Double-1> | マウスの左ボタンをダブルクリック |
使用例
クリックイベント 左クリック⇒Button-1
import tkinter as tk
def handle_left_click(event):
print("Left Clicked!")
root = tk.Tk()
# ウィンドウ上で左クリックイベントを処理するためにbindメソッドを使用
root.bind("<Button-1>", handle_left_click)
root.mainloop()
上記のプログラムは、ウィンドウ上で左クリックをした時に関数を呼び出しています。
内容としては、左クリックしてコンソールに指定の文字列が出力されるものです。
クリックイベント 右クリック⇒Button-3
import tkinter as tk
def handle_right_click(event):
print("Right Clicked!")
root = tk.Tk()
#ウィンドウ上で右クリックイベントした時の処理
root.bind("<Button-3>", handle_right_click)
root.mainloop()
上記のプログラムは、ウィンドウ上で右クリックをした時に関数を呼び出しています。
内容としては、右クリックしてコンソールに指定の文字列が出力されるものです。