キャンバスでXBMを表示しよう
前回はCanvasウィジェットを使って画像を表示しました。
今回はキャンバス上にビットマップのXBM画像を表示してみましょう。
XBMの仕様
XBM(X BitMap)は、UNIXのX Window SystemのGUIで使われるモノクロ2値の情報をテキストで表現したビットマップです。
XBMのデータは、以下のようにビットの並びを16進数で表現します。
XBMを読み込む
CanvasウィジェットでXBMを表示する前に、BitmapImageクラスでXBMデータを読み込みます。
■外部ファイルの場合
オブジェクト名 = tkinter.BitmapImage(file="ファイル名")
■プログラム内の場合
オブジェクト名 = tkinter.BitmapImage(data="定義名")
BitmapImageクラスのオプション
BitmapImageクラスのオブジェクトは、以下のオプションを使うことによって色を変えることができます。
オプション名 | 内容 |
foreground | 前景色(オンのピクセルの色)。デフォルトは黒 |
background | 背景色(オフのピクセルの色)。デフォルトは透過 |
CanvasウィジェットでXBMを表示する
CanvasウィジェットでXBMを表示するメソッドは、通常の画像と同じように create_image()を使います。
XBMはビットマップですが、create_bitmap()ではエラーが発生して表示できません。
オブジェクト名.create_image(座標, オプション)
CanvasウィジェットにXBMを表示するプログラム
CanvasウィジェットにXBMを表示するプログラムは、以下のようになります。
今回使用したXBMのサイズは、40x40ドットです。
表示するイメージは、幅、高さ、データの配列を定義して、トリプルクォート(""")で囲みます。
なお、BitmapImageクラスでXBMを読み込む前に、必ず tkinter.Tk()で画面を作成する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
### インポート import tkinter ### 定数 WIDTH = 640 # 幅 HEIGHT = 400 # 高さ SIZE = 40 # 画像サイズ ### XBM定義 BITMAP = """ #define image_width 40 #define image_height 40 static char image_bits[] = { 0x00,0x7E,0x00,0x7E,0x00,0xC0,0xFF,0xC3,0xFF,0x03,0xE0,0xFF, 0xE7,0xFF,0x07,0xF0,0xFF,0xFF,0xFF,0x0F,0xF8,0xFF,0xFF,0xFF, 0x1F,0xFC,0xFF,0xFF,0xFF,0x3F,0xFC,0xFF,0xFF,0xFF,0x3F,0xFE, 0xFF,0xFF,0xFF,0x7F,0xFE,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xE7,0xFF,0xE7,0xFF,0xFF,0x87,0xFF,0xC1,0xFF, 0xFF,0x03,0xFF,0xC0,0xFF,0xFF,0x03,0x7E,0xC0,0xFF,0xFF,0x07, 0x18,0xE0,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFE,0x1F,0x00,0xF8, 0x7F,0xFE,0x3F,0x00,0xF8,0x7F,0xFC,0x7F,0x00,0xFE,0x3F,0xFC, 0x7F,0x00,0xFE,0x3F,0xF8,0xFF,0x00,0xFF,0x1F,0xF0,0xFF,0x81, 0xFF,0x0F,0xF0,0xFF,0xC3,0xFF,0x07,0xC0,0xFF,0xE7,0xFF,0x07, 0xC0,0xFF,0xFF,0xFF,0x01,0x00,0xFF,0xFF,0xFF,0x01,0x00,0xFF, 0xFF,0xFF,0x00,0x00,0xFE,0xFF,0x7F,0x00,0x00,0xFC,0xFF,0x3F, 0x00,0x00,0xF8,0xFF,0x1F,0x00,0x00,0xF8,0xFF,0x0F,0x00,0x00, 0xE0,0xFF,0x0F,0x00,0x00,0xE0,0xFF,0x03,0x00,0x00,0x80,0xFF, 0x03,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0x00,0xFF,0x00,0x00, 0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00, 0x18,0x00,0x00,0x00,0x00,0x10,0x00,0x00}; """ ### 画面作成 main = tkinter.Tk() ### XBM読み込み image = tkinter.BitmapImage(data=BITMAP) ### キャンバス作成 canvas = tkinter.Canvas(master=main, width=WIDTH, height=HEIGHT) ### キャンバス表示 canvas.pack() ### XBM描画 for y in range(0, HEIGHT, SIZE): for x in range(0, WIDTH, SIZE): canvas.create_image(x, y, image=image, anchor="nw") ### イベントループ main.mainloop() |
プログラムを実行すると、以下のような画面が表示されます。
37行目のBitmapImageに、以下のような前景色と背景色を設定すると色を変更できます。
1 |
image = tkinter.BitmapImage(data=BITMAP, foreground="red", background="lime") |