canvas 文字颜色_Python GUI编程入门(22)-Canvas控件

大部分情况下,使用控件就可以满足简单程序的需求,但是总会存在某些场景需要自己绘制一些内容,这时就需要使用Canvas控件了。例如下面的围棋表示程序。

22f7956a17ba4a383c84d7c047364b3c.png

以下结合这个实例说明Canvas控件的基本用法。

和使用其他控件一样构建主窗口:

# create the main windowroot = Tk()

决定棋盘路数和路间距:

用生成其他控件相似的方法生成Canvas控件,width和height分别用于指定控件的宽度和高度。

# create canvascanvas = Canvas(root, height= space * pan_size, width= space * pan_size)canvas.grid(row=0, column=0)

接下来的描画动作都通过Canvas控件进行。

生成构建棕色矩形棋盘。参数为的左上角、右下角坐标和填充颜色。

# crate pancanvas.create_rectangle(space / 2, space / 2,  space * pan_size - space / 2, space * pan_size - space / 2, fill = '#eeaa40')

通过直线对象描画棋盘格。

# draw horizental linesfor 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 linesfor 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 valueclass GoColor(Enum): WHITE = 0 BLACK = 1# create fontftTimes = Font(family='Times', size=12)# add godef 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


觉得本文有帮助?请分享给更多人。

关注【面向对象思考】,轻松学习每一天!

有任何疑问,欢迎留言提问或讨论。

面向对象设计,面向对象编程,面向对象思考!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值