tkinter学习系列之(八) Canvas控件

本文详细介绍了Tkinter中的Canvas控件,包括其创建方法和各种画图方法,如画线、画圆弧、画矩形、画椭圆、画多边形及显示文字等,并提供了丰富的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

由于最近想在tkinter里内嵌matplotlib,由于用到tkinter里的carves控件,先学习一下。

carves就是画布的意思,用于画图。

(一)carves创建方法

(1)说明:

与其他的控件一样,carves的创建方也是在tk里。

(2)源代码:
import tkinter as tk

win = tk.Tk()
win.geometry("600x400+200+100")

# 创建画布
canvas = tk.Canvas(win, bg="orange")
canvas.place(relx=0.05, rely=0.05, relwidth=0.9, relheight=0.9)

win.mainloop()
(3)输出效果:

01.png

(二)carves的画图方法

(1)说明:
方法说明参数
.create_line()画线(起始坐标),(终点坐标),width=线宽,fill=颜色
.create_arc()画圆弧(起始坐标),(终点坐标),width=线宽,fill=颜色
.create_rectangle()画矩形(起始坐标),(终点坐标),fill='填充的颜色, outline=边框的颜色
.create_oval()画椭圆(外接矩阵的四个坐标),fill='填充的颜色, outline=边框的颜色
.create_polygon()画多边形d多个点的坐标,fill='填充的颜色, outline=边框的颜色
.create_text()显示文字text="文字"
.delete()删除对象创建线返回的对象
(2)源代码:
import tkinter as tk

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

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

# 画一条虚线 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="文字", 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 = [(100, 100), (100, 200), (200, 300), (300, 400), (400, 500)]
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()
(3)输出效果:

02.png

作者:Mark
日期:2019/02/13 周三

转载于:https://www.cnblogs.com/zyg123/p/10382630.html

### 创建带有透明度的 Tkinter Canvas 控件 为了实现在 `Tkinter` 的 `Canvas` 上显示具有透明背景的小部件,通常的方法是在创建这些小部件时设置特定属性来控制其不遮挡底层内容。对于 `Canvas` 自身而言,可以通过调整画布的颜色和填充物使其看起来像是半透明的效果。 #### 设置透明背景颜色 当初始化 `Canvas` 对象的时候,通过设定背景色为 `'transparent'` 或者使用十六进制表示法指定带 Alpha 通道的颜色值(如果 Python 版本支持的话),可以让画布拥有透明特性: ```python import tkinter as tk window = tk.Tk() cv = tk.Canvas(window, bg='white', width=200, height=200) # 使用白色作为默认背景以便于观察变化 cv.pack() # 更改 canvas 背景为透明 (注意这取决于操作系统和窗口管理器的支持情况) try: cv.configure(bg='#ffffff00') # 半透明灰色(仅适用于某些环境)[^1] except Exception: pass # 如果失败则保持原来的背景不变 window.mainloop() ``` 需要注意的是,并不是所有的平台都完全支持这种做法;因此,在实际应用中可能需要考虑兼容性和替代方案。 #### 绘制带有 alpha 值的对象 除了整个 `Canvas` 可能难以做到真正的全局透明外,还可以单独处理放置在其上的图形元素。例如,利用 Pillow 库加载 PNG 图像文件并保留其中的透明信息再放到 `Canvas` 中展示[^3]。 ```python from PIL import Image, ImageTk import tkinter as tk def add_transparent_image(canvas, img_path, position): """向给定的canvas添加一张有alpha通道的图片""" image = Image.open(img_path).convert("RGBA") photo_img = ImageTk.PhotoImage(image) item_id = canvas.create_image(position[0], position[1], anchor=tk.NW, image=photo_img) # 需要保存引用以防垃圾回收机制清除图像数据 canvas.image = photo_img root = tk.Tk() cvs = tk.Canvas(root, bg="lightblue", width=400, height=300) add_transparent_image(cvs, "path_to_your_png_file.png", (50, 50)) cvs.pack() root.mainloop() ``` 上述代码片段展示了如何在一个蓝色背景下正确渲染包含透明部分的PNG格式图片至 `Canvas` 上而不影响其他组件可见性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值