tkinter笔记:画布canvas

这篇博客介绍了如何利用Python的Tkinter库创建图形界面,包括设置窗口属性、创建画布、绘制直线、长方形和椭圆。内容详细展示了每个图形元素的创建方法,如画直线时的横竖线绘制,以及矩形和椭圆的坐标参数设定。此外,还提及了图形的删除、移动以及获取坐标等操作,这些在辅助强化学习的Q-learning算法中可能用到。
摘要由CSDN通过智能技术生成

1 整体框架

import tkinter as tk

window = tk.Tk()
#创建窗口

window.title('my window')
#窗口标题

window.geometry('500x200')
#窗口大小

2 参数设定

UNIT = 40   
# pixels (之后画图中内容用,表示一个小格子占几个像素)

MAZE_H = 4  
# grid height(之后画图中内容用,表示纵向有几个小格子)

MAZE_W = 4  
# grid width(之后画图中内容用,表示横向有几个小格子)

3 创建画布

canvas = tk.Canvas(
    bg='white',
    height=MAZE_H * UNIT, 
    width=MAZE_W * UNIT)

4 画直线

for c in range(0, MAZE_W * UNIT, UNIT):
            x0, y0, x1, y1 = c, 0, c, MAZE_H * UNIT
            canvas.create_line(x0, y0, x1, y1)
#横线 (起点xy 终点xy)
            
for r in range(0, MAZE_H * UNIT, UNIT):
            x0, y0, x1, y1 = 0, r, MAZE_W * UNIT, r
            canvas.create_line(x0, y0, x1, y1)
#竖线(起点xy,终点xy)

每一个creat_line都表示画一条从(x0,y0)到(x1,y1)的直线

比如第一个,画的是[(0,0)->(0,160) ; (40,0)->(40,160) ; (80,0)->(80,160) ; (120,0)->(120,160),也就是所有的水平线

第二个,画的是[(0,0)->(160,0) ; (0,40)->(160,40) ; (0,80)->(160,80) ; (0,120)->(160,120),也就是所有的竖直线

 5 画长方形

hell1_center = origin + np.array([UNIT * 2, UNIT])
hell1 = canvas.create_rectangle(
            hell1_center[0] - 15, hell1_center[1] - 15,
            hell1_center[0] + 15, hell1_center[1] + 15,
            fill='black')

hell2_center = origin + np.array([UNIT, UNIT * 2])
hell2 =canvas.create_rectangle(
            hell2_center[0] - 15, hell2_center[1] - 15,
            hell2_center[0] + 15, hell2_center[1] + 15,
            fill='black')

rect = canvas.create_rectangle(
            origin[0] - 15, origin[1] - 15,
            origin[0] + 15, origin[1] + 15,
            fill='red')

 其中,create_rectangle 中的参数是左上角和右下角两个点的坐标

【或者这么理解,和画椭圆是一样的参数分别是椭圆 左极值点、上极值点、右极值点、下极值点(顺时针转一圈)】

 6 画椭圆型

oval_center = origin + UNIT * 2
oval = canvas.create_oval(
            oval_center[0] - 15, oval_center[1] - 15,
            oval_center[0] + 15, oval_center[1] + 15,
            fill='yellow')

参数分别是椭圆 左极值点、上极值点、右极值点、下极值点(顺时针转一圈)

 7 激活窗口

和之前的一样

canvas.pack()
            
window.mainloop()

8 其他

  • 在mainloop之前,如果想删掉某个图形,可以直接canvas.delete(XXX)
  • canvas.coords(长方形/椭圆),会得到 【左极值点、上极值点、右极值点、下极值点】这四个点组成的元组
  • canvas.move(rect,15,15)——向左右  & 上下 移动 (右&下是加,左&上是减)

 

注:这个教程是辅助Q-learning 算法更新 - 强化学习 (Reinforcement Learning) | 莫烦Python (mofanpy.com)

中没有涉及的Maze 类

参考内容:Reinforcement-learning-with-tensorflow/maze_env.py at master · MorvanZhou/Reinforcement-learning-with-tensorflow (github.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值