TkinterのButtonウィジェットの使い方|クリックした時のコマンドの実行等を解説

スポンサーリンク

今日のTkinterの記事では、Tkinterのボタンウィジェットを取り上げます。

Tkinterのボタンウィジェットは、とてもシンプルで使いやすいウィジェットです。

GUIアプリケーションにボタンを作成し、機能を追加する方法を、いくつかの例を使って見ていきましょう!


スポンサーリンク

Tkinter ボタンウィジェット

このウィジェットを使って、様々な種類のボタンを作ることができます。

テキストだけでなく、画像を含むボタンも作成できます。

また、Tkinter Buttonは、コールバック関数を使って、ボタンの機能に対応する特定の関数を呼び出すことができます。

特定のテキストとコールバック関数を持つボタンを定義するには、以下の定義を使用します。

button = tk.Button(master, text, command)

ここで、text はボタン上のテキスト、command はボタンが押されたときに呼び出されるコールバック関数を指します。

それでは、ボタンをクリックすると、それがクリックされたことを知らせるアラートボックスを表示する簡単なアプリケーションを作ってみましょう!

以下のコードには、1行ごとにコメントがついています。

import tkinter as tk
from tkinter import messagebox
 
# Create the master object
master = tk.Tk()
 
# Sets the window size as "300x300"
master.geometry("300x300")
 
# This is the button callback function
# This must be visible to the button, so we must define it before the button widget!
def buttonCallback():
    messagebox.showinfo("Message", "You have clicked the Button!")
 
# Create a Button widget
button = tk.Button(master, text="Click", command=buttonCallback)
 
# And a label for it
label_1 = tk.Label(master, text="Simple Button")
 
# Use the grid geometry manager to put the widgets in the respective position
label_1.grid(row=0, column=0)
button.grid(row=1, column=0)
 
# The application mainloop
tk.mainloop()

さて、このプログラムを実行すると、次のような出力が得られます。

from PIL import Image, ImageTk
 
# Create a tk.PhotoImage
my_image = Image.open("path/to/image.png")
# Resize it to fit button dimensions
my_image = my_image.resize((25, 25), Image.ANTIALIAS)

さて、もしボタンと一緒に画像を表示させて、もう少し派手にしたい場合は、それが可能です!

この場合、tk.Button() の呼び出しに image という別のキーワード引数を追加してください。

これは ImageTk.PhotoImage で、画像ファイルを使ってインスタンス化しなければなりません。

ImageTkを使用するには、PILモジュールからインポートする必要があります。

まず、PIL画像を作成し、十分に小さくなるようにリサイズしてから、PhotoImage` を生成します。

my_image = Imagetk.PhotoImage(my_image)

さて、これで photoimage オブジェクトを作成する準備ができました。

b = Button(compound=LEFT, image=my_image, text="Button")

これでようやく、このオブジェクトをボタンに追加できるようになりました。

b = Button(compound=LEFT, image=my_image, text="Button", compound=tk.TOP)

しかし、ちょっと注意が必要です。

アイコンを使うと、ボタンが持っているテキストが上書きされてしまうからです。

これを避けるには、キーワード引数 compound を使用します。

この値には tk.CENTERtk.LEFTtk.RIGHTtk.TOP または tk.BOTTOM を設定することができます。

これは、画像に対するテキストの向きを指定するものです。

テキストは画像の上に配置されるので、 tk.TOP を使用します。

import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageTk
 
# Create the master object
master = tk.Tk()
 
# Sets the window size as "300x300"
master.geometry("300x300")
 
# This is the button callback function
# This must be visible to the button, so we must define it before the button widget!
def buttonCallback():
    messagebox.showinfo("Message", "You have clicked the Button!")
 
# Create a tk.PhotoImage
my_image = Image.open("debian.png")
# Resize it to fit button dimensions
my_image = my_image.resize((25, 25), Image.ANTIALIAS)
# Finally, get the PhotoImage object
my_image = ImageTk.PhotoImage(my_image)
 
# Create a Button widget
button = tk.Button(master, text="Click", image=my_image, command=buttonCallback, compound=tk.TOP)
 
# And a label for it
label_1 = tk.Label(master, text="Simple Button")
 
# Use the grid geometry manager to put the widgets in the respective position
label_1.grid(row=0, column=0)
button.grid(row=1, column=0)
 
# The application mainloop
tk.mainloop()

以下、完全なコードを紹介します。

Button Example 1 2
Button Example 1

結果は以下の通りです。

Button Example 2
Button Example 2

まとめ

Tkinterのボタンウィジェットを作ることができましたか?今後のチュートリアルでは、さらにいくつかのウィジェットにフォーカスしていきますので、ご期待ください!


タイトルとURLをコピーしました