【Python入门基础】基于tkinter模块的GUI(二)——canvas画布

canvas画图

方法 说明 参数
.create_line() 画线 起点坐标,终点坐标,width=线宽,fill=颜色
.create_arc() 画弧线 起点坐标,终点坐标,width=线宽,fill=颜色
.create_rectangle() 画矩形 起点坐标,终点坐标,fill=‘填充的颜色’,outline=边框颜色
.create_oval() 画椭圆 外界矩阵的左上角和右小角坐标,fill=‘填充的颜色’,outline=边框颜色
.create_polygon() 画多边形 多点坐标,fill=‘填充的颜色’,outline=边框颜色
.create_text() 显示文字 text=‘文字’
.delete() 删除对象  
.move() 移动 (参数,0,2)横向不移动,纵向移动2
.update() 更新 当应用程序的状态发生变化和需要这些变化立刻显示时,不用等待脚本完成
.pack() 包装  

eg.canvas画布

import tkinter as tk

win = tk.Tk()
win.geometry("600x400+200+100")
canvas = tk.Canvas(win, bg="white")
canvas.place(relx=0.05, rely=0.05, relwidth=0.9, relheight=0.9)

# 画一条实线, fill:填充的颜色
line1 = canvas.create_line((0, 10), (50, 50), width=5, fill="green")

# 画一条虚线 dash=(1, 1)
canvas.create_line((200, 200), (200, 300), width=5, fill="green", dash=(1, 1))

# 画一个圆弧
canvas.create_arc((100, 100), (200, 200), width=5)

# 显示文字
canvas.create_text((300, 100), text="canvas画布", font=("微软雅黑", 18))

# 绘制矩形, outline:线条颜色
canvas.create_rectangle(50, 25, 150, 75, fill='blue', outline='green', width=5)

# 绘制椭圆
canvas.create_oval(200, 25, 350, 75, fill='pink', outline='green', width=5)

# 绘制多边形
point = [(0, 0), (150, 200), (200, 300), (300, 450), (450, 550)]
canvas.create_polygon(point, outline='green', fill='yellow')


def dele_line():
    canvas.delete(line1)


btn = tk.Button(canvas, text="删除", command=dele_line)
btn.place(relx=0.4, rely=0.8)

win.mainloop()

运行结果:

【Python入门基础】基于tkinter模块的GUI(二)——canvas画布_第1张图片

eg.五子棋盘

import tkinter


def mouse_evt_handler(evt=None):
    print(evt.x,evt.y)
    # margin=20
    row = round((evt.y - 20) / 40)
    col = round((evt.x - 20) / 40)
    pos_x = 40 * col
    pos_y = 40 * row
    print(pos_x, pos_y, 40 + pos_x, 40 + pos_y)
    # 圆外矩形左上角与右下角坐标
    canvas.create_oval(pos_x, pos_y, 40 + pos_x, 40 + pos_y, fill='black')


top = tkinter.Tk()
# 设置窗口尺寸
top.geometry('620x620')
# 设置窗口标题
top.title('五子棋')
# 设置窗口大小不可改变
top.resizable(False, False)
# 设置窗口置顶
top.wm_attributes('-topmost', 1)
canvas = tkinter.Canvas(top, width=600, height=600, bd=0, highlightthickness=0)
# 鼠标左键绑定点击事件
canvas.bind('', mouse_evt_handler)
canvas.create_rectangle(0, 0, 600, 600, fill='b99e20', outline='white')
for index in range(15):
    canvas.create_line(20, 20 + 40 * index, 580, 20 + 40 * index, fill='black')
    canvas.create_line(20 + 40 * index, 20, 20 + 40 * index, 580, fill='black')
canvas.create_rectangle(15, 15, 585, 585, outline='black', width=4)
canvas.pack()
tkinter.mainloop()

运行结果:

【Python入门基础】基于tkinter模块的GUI(二)——canvas画布_第2张图片

说明:五子棋对弈过程待实现。

eg.动态动画

import tkinter
import time


# 播放动画效果的函数
def play_animation():
    canvas.move(oval, 2, 2)
    canvas.update()
    top.after(50, play_animation)


x = 10
y = 10
top = tkinter.Tk()
top.geometry('600x600')
top.title('动画效果')
top.resizable(False, False)
top.wm_attributes('-topmost', 1)
canvas = tkinter.Canvas(top, width=600, height=600, bd=0, highlightthickness=0)
canvas.create_rectangle(0, 0, 600, 600, fill='#beee99')
oval = canvas.create_oval(10, 10, 60, 60, fill='yellow')
canvas.pack()
top.update()
play_animation()
tkinter.mainloop()

运行结果:

【Python入门基础】基于tkinter模块的GUI(二)——canvas画布_第3张图片

你可能感兴趣的:(Python学习)