ここではTkinterにおける「Button」の使用例をまとめています。
この記事の対象
Button概要
Tkinterの「Button」は引数にイベント関数を指定して使用するものです。
基本的な型は以下になります。
tk.Button(command = ***)
ボタンにテキスト挿入
import tkinter as tk
root = tk.Tk()
root.title("Auto")
root.geometry("300x200")
button = tk.Button(text="Test")
button.pack(expand=False, side='left', anchor=tk.SW)
root.mainloop()
ボタンにテキストを挿入したい場合は、引数に「text」を指定します。
結果
ボタン内のテキスト指定
文字色
import tkinter as tk
# ウィンドウの作成
root = tk.Tk()
root.title("Test")
# ボタンの作成
button1 = tk.Button(root, text="Click Me",foreground='#ff0000')
button1.pack(pady=10)
# イベントループの開始
root.mainloop()
文字に色を指定したい場合は「foreground」でカラーコードを指定するだけです。
結果
ボタンに画像を挿入
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
root.title("Auto")
root.geometry("300x200")
image = Image.open("ip.png")
image = image.resize((60, 60))
image = ImageTk.PhotoImage(image)
button = tk.Button(image=image)
button.pack(expand=False, side='left', anchor=tk.SW)
root.mainloop()
ボタンに画像を挿入する場合は、予め「Image.open()」で画像を読込んでおく必要があります。読込んだ画像をButtonの引数でimageで指定します。
ここでは、読込んだ後、リサイズしています。
結果
クリック ⇒ 並列処理
import tkinter as tk
from PIL import Image, ImageTk
import threading
#1---並列処理
def start_thread():
thread1 = threading.Thread(target=start)
thread1.start()
#2---クリック後の内容
def start():
for i in range(10):
print(i)
root = tk.Tk()
root.title("Auto")
root.geometry("300x200")
button = tk.Button(text="Test", command = start_thread)
button.pack(expand=False, side='left', anchor=tk.SW)
root.mainloop()
ボタンを押して関数を走らせた場合、その処理が終わらないと他の処理ができないです。
そこで、並列処理を走らせる必要があります。
#1---並列処理
def start_thread():
thread1 = threading.Thread(target=start)
thread1.start()
1の部分では並列処理を走らせています。並列処理の内容はボタンをクリックした際に行いたい関数を指定しています。
#2---クリック後の内容
def start():
for i in range(10):
print(i)
2の部分では、クリック後の処理で並列処理の内容になります。
クリック ⇒ ラベル消去(非表示)
import tkinter as tk
def test():
lb_test.pack_forget()
root = tk.Tk()
root.title("Test")
root.geometry("300x200")
lb_test = tk.Label(text='Hello, World!')
lb_test.pack()
button = tk.Button(text="Test",command = test)
button.pack(expand=False, side='left', anchor=tk.SW)
root.mainloop()
上記のプログラムは、ボタンを押したら対象のラベルを非表示にする内容となっています。
対象のオブジェクトがpackで配置されている場合で非表示にしたい時は「***.pack_forget()」になります。
同様にgridだったら「grid_forget()」、placeだったら「place_forget()」になります。
また、再び再表示したい場合はpackで指定して再生成する必要があります。
結果
クリック ⇒ 指定アプリ起動
import tkinter as tk
import subprocess
def test():
subprocess.Popen(r"C:\Program Files\Microsoft Office 15\root\office15\excel.exe")
root = tk.Tk()
root.title("Test")
root.geometry("300x200")
button = tk.Button(text="Test",command = test)
button.pack(expand=False, side='left', anchor=tk.SW)
root.mainloop()
上記のプログラムはボタンをクリックしたら指定したアプリを起動するものです。
指定のアプリの起動には「subprocess.Popen()」を用いる必要があります。引数には起動したいアプリのパスを指定します。
結果
【補足】Commandで引数を渡す場合
Commandで引数を渡す場合、lambda関数を使用する必要があります。
import tkinter as tk
def test(name):
print(f"Hello, {name}!")
root = tk.Tk()
root.title("Test")
name_entry = tk.Entry(root)
name_entry.pack(pady=10)
# 引数を渡すためにlambda関数を使用
button = tk.Button(root, text="Test", command=lambda: test(name_entry.get()))
button.pack(pady=20)
root.mainloop()