如何根据字典内元素数量为网格圆形设置对应填充色?
圆形网格着色实现方案
第一步:修正基础语法错误
你提供的颜色字典存在语法缺失,首先补全键值之间的冒号:
circle_colors_dict = { 0: ['#7CB9E8', '#00308F', '#72A0C1', '#1CAC78'], 1: ['#fd5c63', '#FBCEB1', '#A52A2A', '#FF7F50'], 2: ['#F0E68C', '#FFC72C', '#87A96B', '#4B6F44'] }
第二步:实现匹配字典元素数量的着色逻辑
我们采用的规则为:根据行号匹配颜色字典的分组,根据列号匹配分组内的具体颜色,完全按照字典的元素数量自动循环适配,不需要硬编码数值。
完整函数实现如下:
def draw_shapes(circles, start_x, start_y, circle_colors_dict, size, num_rows, a_canvas): # 自动获取颜色分组总数、单组颜色数量,适配字典后续修改 num_palette_groups = len(circle_colors_dict) num_colors_per_group = len(next(iter(circle_colors_dict.values()))) y = start_y for row in range(num_rows): # 按行号取模匹配颜色分组 current_palette = circle_colors_dict[row % num_palette_groups] x = start_x for col in range(num_rows): # 按列号取模匹配分组内的具体颜色 color = current_palette[col % num_colors_per_group] # 绘制圆形 a_canvas.create_oval(x, y , x+size, y+size, fill=color) x += size y += size
可选规则调整
如果需要其他着色逻辑,可以修改颜色取值的计算方式:
- 按网格位置行列和取模:
color = circle_colors_dict[(row+col) % num_palette_groups][(row+col) % num_colors_per_group],实现斜向同色的效果 - 按块分组着色:每N行N列为一个块,块内用完一个分组的所有颜色再切换下一个分组
内容的提问来源于stack exchange,提问作者user15103706
相关产品推荐
相关产品推荐

