xbm文件使用纯文本描述单色位图图像,是一种被广泛使用的通用文件格式,扩展名为xbm。在图形界面(GUI)中,小的单色简单图形、图标和鼠标位图可采用xbm文件。在python中,Canvas多个方法的参数Bitmap和stipple以及组件属性Bitmap都可使用xbm文件显示图形。win10和winXP程序工具栏有很大不同,工具栏中没有传统按钮组件,而是由很多图形代替按钮的功能,可用方法create_bitmap在Canvas上生成xbm文件图像创建win10风格工具栏。有兴趣可参看博文:用方法create_bitmap在Canvas上生成xbm文件图像创建win10风格工具栏。
创建xbm格式位图文件有很多方法,这里介绍使用Win10画图程序和转换图像格式的网页创建xbm文件的方法。具体方法如下:用win10画图程序画一个图形,例如矩形、直线和椭圆等,其外边界宽高各为指定像素,例如30,然后保存为24位位图(.bmp;.dib)格式。未实验保存为其它格式,如png格式,能否转换为xbm格式。打开网页https://convertio.co/zh/jpg-xbm/。在网页中将被转换文件扩展名改为:BMP,选择并上传要转换的BMP文件后,点击转换,完成后下载即可得到xbm文件。该文件可以被win10的记事本程序打开,将这个字符串拷贝到程序中,建立一个字符串实例。通过这个实例可创建一个BitmapImage类实例,Python组件属性image或方法的参数image可使用这一个BitmapImage类实例显示图形。
Python某些能显示图像的组件有属性bitmap和image,tkinter canvas方法create_bitmap有参数bitmap,方法create_image有参数image,方法create_oval、create_arc 、create_polygon、create_line、create_text和create_rectangle等有参数stipple。经常用到是image属性或参数,支持多种图像格式,包括xbm。以前没使用过bitmap和stipple属性或参数,直到前边博文才第一次使用。bitmap和stipple不能赋值位图类实例,也不能赋值bmp格式文件名,仅能赋值xbm格式文件名,格式为:bitmap="@pic/line.xbm",字符串中,@表示后边是文件路径。下边是一个验证程序,介绍使用bitmap、stipple和image的各种方法,那些方法和组件能使用xbm文件及如何使用。
注意,必须先创建line.xbm和circle.xbm文件,并拷贝到下边程序所在文件夹的子文件夹pic中,程序才能正常运行。

import tkinter as tk
root = tk.Tk()
root.geometry('300x300')
BITMAP = """
#define 4aba778e0c9f4fadf164c6324c112d14X7ECc5xgAHJPRiYq_width 30
#define 4aba778e0c9f4fadf164c6324c112d14X7ECc5xgAHJPRiYq_height 30
static char 4aba778e0c9f4fadf164c6324c112d14X7ECc5xgAHJPRiYq_bits[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
"""
#以上"""  """之间内容是用记事本查看line.xbm文件的内容,拷贝到这里。
b1 = tk.BitmapImage(data=BITMAP)
b2=tk.BitmapImage(file="pic/line.xbm")
cv = tk.Canvas(root,height=300,width=300,bg='#7FFFFE')
cv.pack()
cv.create_image(30,30,image=b1)     #image支持多种格式文件,jpg、png、xbm等
cv.create_image(70,30,image=b2)
#cv.create_bitmap(30,30,bitmap=b1)              #出错,bitmap不支持对象ID,仅支持文件名?
#cv.create_bitmap(30,30,bitmap="@line.bmp")     #出错,bitmap只支持xbm文件
#下句将显示一条线段,将鼠标移到该线段上方,变为圆,参数disabledbitmap也可以使用xbm文件
cv.create_bitmap(110,30,bitmap="@pic/line.xbm",activebitmap="@pic/circle.xbm",background='blue',foreground='red')
tk.Label(cv,image=b1).place(x=150,y=15,width=60,height=60)      #用bitmap=b1出错,加bg='red'出错
tk.Label(cv,bitmap="@pic/line.xbm").place(x=220,y=15,width=60,height=60)
but=tk.Button(cv,image=b1,activebackground='lightskyblue',bg='blue',fg='red')#按钮按下是激活状态,fg='red'无用
but.place(x=30,y=55,width=60,height=60)
but1=tk.Button(cv,bitmap="@pic/line.xbm",activebackground='lightskyblue',bg='green',fg='red')    #fg='red'有用
but1.place(x=30,y=150,width=60,height=60)
#下句填充圆,将鼠标移到该矩形上方,填充变为直线
cv.create_rectangle(100, 100, 250, 250,fill="red",stipple = "@pic/circle.xbm",activestipple="@pic/line.xbm")
root.mainloop()

python自带一些位图,Python组件属性或方法参数bitmap和stipple可直接使用。下边程序说明使用方法。感觉"question"等是文件名?如Python用文件名读xbm文件,但在内存中又是如何保存这些文件的呢,想了很久也没找到实现的方法。

from tkinter import *
canvas_width = 300
canvas_height =200
master = Tk()
canvas = Canvas(master,width=canvas_width,height=canvas_height)
canvas.pack()
bitmaps = ["error", "gray75", "gray50", "gray25", "gray12", "hourglass", "info", "questhead", "question", "warning"]
nsteps = len(bitmaps)
step_x = int(canvas_width / nsteps)
for i in range(0, nsteps):canvas.create_bitmap((i+1)*step_x - step_x/2,50, bitmap=bitmaps[i])Label(master,bitmap="question").place(x=150,y=100,width=60,height=60)canvas.create_rectangle(30, 100, 100, 170,
outline='red', # 边框颜色
stipple = 'gray12', # 填充的位图
fill="red", # 填充颜色
width=5 # 边框宽度
)
mainloop()

Python tkinter canvas方法的Bitmap、stipple参数和组件Bitmap属性的使用以及xbm文件相关推荐

  1. Python tkinter(六) 标签(Label)组件的属性说明及示例

    使用语法 widget = Label( master, parameter=value, ... ) master:标签控件的父容器 parameter:标签的参数 value:参数对应的值 各参数 ...

  2. 把python tkinter canvas中的图形图像保存为通用格式文件的5种方法

    在计算机上画图未完成,需要保存未完成图形以便以后继续,或者完成画图,要保存为通用格式文件,方便浏览.如使用python tkinter Canvas画图,其好像没有将图像保存通用格式文件的方法,但可以 ...

  3. 数字华容道游戏_用Python tkinter Canvas实现

    在博文<用39条Python语句完成"数字华容道"游戏>一文中使用按钮实现该游戏.本文用Python tkinter Canvas实现该游戏,也仅用了46条语句. 游戏 ...

  4. python中label组件参数_Python tkinter(六) 标签(Label)组件的属性说明及示例

    使用语法 widget = Radiobutton( master, parameter=value, ... ) master:文本框控件的父容器 parameter:文本框的参数 value:参数 ...

  5. Python tkinter - 第五章 按钮控件(Button)属性

    第5章 按钮控件(Button) 5.1 按钮控件介绍 按钮是一个标准的tkinter控件.按钮上可以显示文字或者图片作为提示信息.文字只能使用一种字体以及颜色.按钮的最主要作用是被点击后,可以调用指 ...

  6. Python Tkinter Canvas该如何使用

    现在的很多人都写python不写C++了,而有了python,C++的GUI光辉就此结束!欧耶!! 那么,是什么替代了C++的GUI呢?没错,就是Tkinter. 现在一大堆人追求piu亮的GUI,而 ...

  7. python tkinter canvas 画心形

    注:在使用 create_arc 绘制弧时,和 create_oval 的用法相似,因为弧是椭圆的一部分,因此同样也是指定左上角和右下角两个点的坐标. 默认总是绘制从 (x_1,y_1)开始,程序可通 ...

  8. python tkinter canvas上删除图形与撤销删除的操作

    def dele(event)://删除图形global dele_coordele_coor.append(cv.coords('current')) #获取当前active的item的坐标cv.d ...

  9. python类之间方法互相调用_Python中类与类之间属性和方法的调用

    Python中类与类之间属性和方法的调用 class A(object):  #定义一个类 name='python' #类属性 def __init__(self): #实例属性 self.age= ...

最新文章

  1. WEP自动破解工具wesside-ng
  2. linux下使用TC模拟弱网络环境
  3. 【心随笔】叙述你成功完成一件事情的方法
  4. 用txt写的mysql数据库_TXT怎么导入mySQL数据库
  5. iOS接收airdrop发送来的文件
  6. 解决 IIS 部署网站引用 woff/woff2/svg 字体报 404 错误
  7. GitLab服务更换ip后项目地址ip如何修改
  8. 关于公布2013年度局青年学术和技术带头人考评与增选结果的通知
  9. 电影说明里何谓枪版?何谓TS版?TC版?
  10. 深度测评 | 五大主流多端开发框架全面对比
  11. 【运营小卖部】如何玩转社群?社群运营教程
  12. 半加器设计(结构描述法)
  13. Agents and Multi-agent System考试重要知识点整理
  14. kaggle操作入门
  15. 【财务分析】ERP软件的财务管理系统具有哪些功能?
  16. 【新书速递】信息安全标委会委员推荐的金融科技安全工具书
  17. 小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解
  18. 用计算机看影碟是数字化过程,2012年上海市高中学业水平考试信息科技
  19. 计算机技术在现代地球科学中的重要性,浅谈GIS技术在地球科学中的应用.doc
  20. C语言的前置++和后置++

热门文章

  1. findstr 用法
  2. jquery LigerUI是什么?
  3. 完了!我写的 bug 要保留到一万年以后鞭尸
  4. 360网盟邀请码有钱联盟百度有钱联盟
  5. tencent腾讯——面试
  6. NXP I.MX芯片资源合集
  7. 自然语言理解应用API对比报告
  8. java jstack使用_jstack命令的使用
  9. Excel作图-二维面积图展现占比变化
  10. Real6410移植linux-2.6.39.1记录(2)-LCD驱动移植