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

需求:
我现在有一个列表,里面放着一系列的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()

效果如下:
【python tkinter Canvas画布 绘图,文字实例】_第1张图片

你可能感兴趣的:(python,开发语言,前端)