どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

Labelを使う

 

tkinterのラベルの使い方について書いていきます。

この記事でやること。

  • Labelの基本的な使い方。
  • Labelに画像を貼り付ける
  • Labelに表示しているテキストの更新。

 

 

関連リンク

12. The Label widget

Labelを作る。

Labelを作ってメインウィンドウに貼り付けるプログラムです。

import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text="Hello")
label.pack()
root.mainloop()

f:id:pytry3g:20180930174041p:plain

オプションについて

  • text : ラベルに表示するテキスト
  • bg : ラベルの色
  • fg : ラベルに表示しているテキストの色
  • cursor : ラベルの上にマウスポインタがあるときに、マウスポインタの見た目を変更できる。詳しくはこちら
  • font : ラベルに表示している文字についての設定
  • relief : ラベルの見た目の設定。詳しくはこちら

これらのオプションを使ってラベルを作ってみると、

import tkinter as tk
root = tk.Tk()
label = tk.Label(
    root, text="Hello", bg="lime green", fg="blue",
    cursor="heart", font=("Helvetica", 16, "bold"), relief="groove")
label.pack()
root.mainloop()

f:id:pytry3g:20180930175751p:plain

Labelに画像を貼り付ける。

Labelに画像を貼り付けてみます。

f:id:pytry3g:20180927204719p:plain

上にある顔文字の画像をsmile.pngとしてラベルに貼り付けます。

画像を貼り付ける手順は次の通りです。

  1. 画像を読み込む。
  2. PhotoImageのオブジェクトにする
  3. Labelの引数imageにPhotoImageにしたオブジェクトを渡す。
import tkinter as tk
from PIL import Image, ImageTk
# メインウィンドウ
root = tk.Tk()
# 画像をPhotoImageのオブジェクトにしてからLabelの引数imageに渡す
img = Image.open("smile.png")
tkimg = ImageTk.PhotoImage(img)
label = tk.Label(root, image=tkimg, bg="black")
label.pack()
root.mainloop()

(実行結果)

f:id:pytry3g:20180930181827p:plain

Labelに表示しているテキストを更新する。

Labelに表示しているテキストを更新するにはpythonの変数を使わずにtkinterで用意されているStringVar()を使います。

var = tk.StringVar()

StringVar()に文字列を入れるにはset()を使います。

var.set("Hello")

そして、このStringVar()のオブジェクトをLabelの引数textvariableに渡します。

label = tk.Label(root, textvariable=var, width=10, bg="white")

 

今回はラベルを左クリックしたときにテキストの更新をするようにバインディングの設定をしてみました。

def update_label(event):
    strings = random.choice(["A", "B", "C"])
    var.set(strings)

label.bind("<ButtonPress-1>", update_label)

 

コードをまとめるとこんな感じになります。

import random
import tkinter as tk

def update_label(event):
    strings = random.choice(["A", "B", "C"])
    var.set(strings)

root = tk.Tk()
var = tk.StringVar()
var.set("Hello")
label = tk.Label(root, textvariable=var, width=10, bg="white")
label.pack()
label.bind("<ButtonPress-1>", update_label)
root.mainloop()

(実行結果)

f:id:pytry3g:20181001045331p:plain

ちなみに、テキストの内容を取得するにはget()を使います。

Q&A

画像が表示されない場合

こちらを参考にしてみてください。