网站首页 > 基础教程 正文
大部分情况下,使用控件就可以满足简单程序的需求,但是总会存在某些场景需要自己绘制一些内容,这时就需要使用Canvas控件了。例如下面的围棋表示程序。
以下结合这个实例说明Canvas控件的基本用法。
和使用其他控件一样构建主窗口:
# create the main window root = Tk()
决定棋盘路数和路间距:
用生成其他控件相似的方法生成Canvas控件,width和height分别用于指定控件的宽度和高度。
# create canvas canvas = Canvas(root, height= space * pan_size, width= space * pan_size) canvas.grid(row=0, column=0)
接下来的描画动作都通过Canvas控件进行。
生成构建棕色矩形棋盘。参数为的左上角、右下角坐标和填充颜色。
# crate pan canvas.create_rectangle(space / 2, space / 2, space * pan_size - space / 2, space * pan_size - space / 2, fill = '#eeaa40')
通过直线对象描画棋盘格。
# draw horizental lines for r in range(0, pan_size): canvas.create_line(space / 2, space / 2 + r * space, space * pan_size - space / 2, space / 2 + r * space) # draw vertical lines for c in range(0, pan_size): canvas.create_line(space / 2 + c * space, space / 2, space / 2 + c * space, space * pan_size - space / 2)
棋子描画函数利用椭圆形对象和Text对象描画黑子和白子,如果指定了number参数,还可以在棋子上生成反白文字。
#color enum value class GoColor(Enum): WHITE = 0 BLACK = 1 # create font ftTimes = Font(family='Times', size=12) # add go def set_go(row, col, color, number=0): r = 11 go_color = 'white' font_color = 'black' if color==GoColor.BLACK: go_color = 'black' font_color = 'white' # add go shape canvas.create_oval(space / 2 + col * space - r, space / 2 + row * space - r, space / 2 + col * space + r, space / 2 + row * space + r, fill=go_color) # add number if number>0: canvas.create_text(space / 2 + col * space, space / 2 + row * space, font=ftTimes, fill=font_color, text=str(number))
代码在生成椭圆形时指定的参数是左上角、右下角坐标和填充颜色;生成文字对象时指定的是位置、字体和文字。
最后按照小目定式的一种增加若干棋子。
# add gos. set_go(3, 10, GoColor.BLACK) set_go(3, 8, GoColor.WHITE) set_go(5, 10, GoColor.BLACK, 1) set_go(2, 10, GoColor.WHITE, 2) set_go(2, 11, GoColor.BLACK, 3) set_go(2, 9, GoColor.WHITE, 4) set_go(1, 11, GoColor.BLACK, 5) set_go(2, 4, GoColor.WHITE, 6)
完整代码可以从以下地址下载:
https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/22%20Canvas.py
觉得本文有帮助?请分享给更多人。
关注【面向对象思考】,轻松学习每一天!
有任何疑问,欢迎留言提问或讨论。
面向对象设计,面向对象编程,面向对象思考!
猜你喜欢
- 2024-10-12 web前端:canvas动画彩色气泡,类直播间点赞效果实现
- 2024-10-12 HTML使用Canvas绘制动画时钟 canvas绘制钟表
- 2024-10-12 三个绘图工具类详解 常用的绘图工具有哪些,分别有什么用
- 2024-10-12 如何用不到 2KB 的 JavaScript 代码写一个 3D 赛车游戏?
- 2024-10-12 VUE动态生成二维码并利用canvas合成海报图
- 2024-10-12 JavaScript+Canvas实现自定义画板
- 2024-10-12 JavaScript 中的画布 js实现画板
- 2024-10-12 canvas绘制饼图的方法介绍(代码) canvas画饼状图百分比
- 2024-10-12 H5表白特效——Canvas实现粒子涂鸦效果
- 2024-10-12 h5-自定义生成海报(头条初吻,轻虐)
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)