You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Tkinter程序中同时绘制多个图形?

Tkinter多函数图形同时绘制实现方案

当前你用Tkinter开发的绘图程序仅能绘制单个函数图形,尝试用if-else在循环中切换函数时,所有点会分散到不同图形里,无法区分多个图形。下面是优化后的实现方案,支持同时绘制多个不同函数的图形,且每个图形用不同颜色区分。

修改后的完整代码

from tkinter import *

wind = Tk()
wind.geometry("400x400")

canw = Canvas(wind, width=400, height=400)
canw.pack()
canw.place(x=-1, y=-1)

# 绘制坐标系网格
lines_index = 0
while lines_index <= 40:
    line_color = "#000" if lines_index == 20 else "#4C8098"
    line_width = 2 if lines_index == 20 else 1
    # 绘制水平网格线
    canw.create_line(0, 0 + 10*lines_index, 400, 0 + 10*lines_index, fill=line_color, width=line_width)
    # 绘制垂直网格线
    canw.create_line(10*lines_index, 0, 10*lines_index, 400, fill=line_color, width=line_width)
    lines_index += 1

# 生成x轴取值范围(-20到20,步长0.01)
x_values = []
i = -20
while i <= 20:
    x_values.append(i)
    i += 0.01

# 定义要绘制的函数列表,每个元素是(函数计算逻辑, 图形颜色)
functions = [
    (lambda x: x**2, "red"),          # 二次函数
    (lambda x: 3*(x+3), "blue"),      # 一次函数
    (lambda x: x**3, "green"),        # 三次函数
    (lambda x: 6*(x**2) + 2*x +8, "orange"),  # 二次函数
    (lambda x: 1/x if x !=0 else None, "purple")  # 反比例函数(跳过x=0)
]

# 循环绘制每个函数的图形
for func, color in functions:
    for x in x_values:
        y = func(x)
        if y is None:
            continue  # 跳过无意义的点(比如反比例函数的x=0)
        # 转换坐标系:画布中心(200,200)为原点,x轴向右,y轴向上
        canvas_x = (x * 10) + 200
        canvas_y = -(y * 10) + 200
        # 绘制点(用小椭圆模拟点)
        canw.create_oval(canvas_x, canvas_y, canvas_x, canvas_y, outline=color, fill=color)

wind.mainloop()

核心优化说明

  • 函数列表封装:把每个要绘制的函数和对应颜色打包成列表元素,统一遍历绘制,彻底避免if-else逻辑导致的点分散问题。
  • 颜色区分:每个函数对应独有的颜色,绘制出的图形边界清晰,不会混淆。
  • 异常点处理:对无意义的取值(比如反比例函数x=0)做跳过处理,避免程序报错。
  • 代码简化:网格绘制部分用三元表达式简化了原有的if-else逻辑,保持代码简洁。

内容的提问来源于stack exchange,提问作者c4this

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:12:33