【python tkinter Canvas画布 绘图,文字实例】

这篇博客展示了如何使用Python的Tkinter库创建一个画布,并根据字典中key的state属性(红色或蓝色)来划分矩形区域。代码遍历字典,计算每个颜色段的宽度,并在画布上绘制相应颜色的矩形,从而实现了一个动态的彩色矩形展示。

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

需求:
我现在有一个列表,里面放着一系列的key,每一个key有length和state两个属性,所有length之和为sum_length。
我的需求是:我需要在屏幕上显示一个矩形,它展示所有key的状态。
遍历列表,如果key[i].state==“blue”,就把矩形的key[i].length/sumLength这个比例宽的部分涂为蓝色。
如果key[i].state==“red”,则涂为红色。
直到整个矩形被划分为红色的块和蓝色的块(每一个块的高和矩形的高是一样的)。

实现代码如下:

import tkinter as tk

dictx = {
    "key1": {"length": 2, "state": "red"},
    "key2": {"length": 3, "state": "blue"},
    "key3": {"length": 5, "state": "red"},
}

root = tk.Tk()
cv = tk.Canvas(root, bg='white', height=800, width=800)
cv.pack()


def gen_text(dictx):
    txt = ""
    sum_length = 0
    for k, v in dictx.items():
        length = v['length']
        sum_length += length
        txt += f"{k}: length={length}, state={v['state']};"
    txt = f"{txt[:-1]}.sum_length={sum_length}\n列表内容:{list(dictx.keys())}"
    return txt, sum_length


def draw_rectangle(x0, y0, x1, y1, color="red"):
    cv.create_rectangle(x0, y0, x1, y1, fill=color)


def draw_rectangles(dictx, sum_length):
    y0, y1 = 50, 200
    x0 = 10
    rectangle_width = 500
    for k, v in dictx.items():
        length = v["length"]
        state = v["state"]
        x1 = x0 + length / sum_length * rectangle_width
        draw_rectangle(x0, y0, x1, y1, state)
        x0 = x1


txt, sum_length = gen_text(dictx)
cv.create_text(400, 20, text=txt)
draw_rectangles(dictx, sum_length)
root.mainloop()

效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值