PythonでGUIアプリを作成できるtkinterを使ってみた備忘のメモ。記載内容は徐々に増やしていく予定。
まずは、ボタンの生成と関数の実行
シンプルにボタンを配置して、ボタンを押したら関数を実行する。
ボタンを生成したときに、commandで関数を指定しておく。
import tkinter
from functools import partial
# 画面作成
root = tkinter.Tk()
root.geometry('700x600')
root.title('ボタンイベントの検証')
# シンプルなボタンの関数
def test_click():
print("test")
test_button = tkinter.Button(root, text="test", command=test_click)
test_button.grid(row=0, column=0)
# 画面を表示
root.mainloop()
関数に引数を使う場合は、partialを使うことで可能になる。
# 引数を使う場合
def numbtn_click(num):
print(num)
# partialを使う必要あり
num_btn = tkinter.Button(root, text='num_1', command=partial(numbtn_click, 1))
num_btn.grid(row=1, column=0 )
# これだと、うまく動かない
num2_btn = tkinter.Button(root, text='うまく動かない', command=numbtn_click(5))
num2_btn.grid(row=2, column=0 )
bindを使ってクリックイベントを使って関数を実行することもできる。<Button-1>でマウスの左ボタンを押したときにイベントが発生する。
# bind でボタンクリックでイベント発生させる方法
def text_click(event):
print(event.widget["text"])
text_btn = tkinter.Button(root, text="bindボタン")
text_btn.bind("<Button-1>", text_click)
text_btn.grid(row=3, column=0)
bindでも、引数を使うことはできる。この場合もpartialを使う。
その場合は、event(押されたボタンの情報など)は最後の引数に入ることになる。
下の例では、関数には4つの引数で、bindのなかでは3つの引数を指定することになる。
# bind で引数を使う。eventは最後の引数に入るよう
def bind_args_click(arg1, arg2, arg3, arg4):
print(arg1)
print(arg2)
print(arg3)
print(arg4)
print(arg4.widget["text"])
bind_nem_btn = tkinter.Button(root, text="bind_arg")
bind_nem_btn.bind("<ButtonRelease-1>", partial(bind_args_click, 1, 2, 3))
bind_nem_btn.grid(row=4, column=0)
ちなみに、<ButtonRelease-1>を指定することで、クリックのボタンを離した時点で発火させることもできる。
参考にしたリンク
・python GUI tcl/tk ウィンドウ全体リサイズ時にフォームサイズも伸縮させる
コメント