如何从文本文件逐行读取绘图点以用Python Turtle绘制多边形
使用Python Turtle绘制文件中的多个独立多边形
你的核心问题是没有按行区分不同多边形的顶点数据,现有代码把所有行的内容混在一起了,没法单独处理每个多边形。下面一步步帮你修正并实现绘图功能:
第一步:修正数据读取逻辑
首先要逐行读取文件内容,每行对应一个多边形的顶点,这样就能把每个多边形的坐标单独存起来。
优化后的读取代码
import turtle import os # 用os.path.join拼接路径,自动适配不同系统的路径分隔符 file_path = os.path.join(os.path.dirname(__file__), 'plotpoints.txt') # 存储所有多边形的顶点列表,每个元素对应一个多边形的坐标对集合 polygons = [] with open(file_path, "r") as plotme: # 逐行遍历文件内容 for line in plotme: # 去掉行尾换行符,按逗号分割成字符串坐标列表 coords_str = line.strip().split(",") # 将字符串转成整数,再按(x,y)格式分组 coords = [] for i in range(0, len(coords_str), 2): x = int(coords_str[i]) y = int(coords_str[i+1]) coords.append((x, y)) # 把当前多边形的坐标列表加入总集合 polygons.append(coords)
代码关键点解释
os.path.join:比直接拼接字符串更安全,不会因为Windows/Linux路径分隔符不同出错line.strip():清除每行末尾的换行符,避免分割出空字符串干扰后续处理- 步长为2的循环:把相邻两个数值组成(x,y)坐标对,让每个多边形的坐标变成
[(-30,9), (108,5), ...]的格式,方便绘图调用
第二步:用Turtle绘制所有多边形
现在我们有了每个多边形的独立坐标列表,就可以循环遍历完成绘图:
# 创建绘图笔对象 pen = turtle.Turtle() pen.speed(0) # 设置最快绘图速度 # 遍历每个多边形 for poly in polygons: pen.penup() # 抬笔移动到多边形的第一个顶点 pen.goto(poly[0]) pen.pendown() # 依次连接后续所有顶点 for (x, y) in poly[1:]: pen.goto(x, y) pen.penup() # 保持绘图窗口显示,直到手动关闭 turtle.done()
绘图逻辑说明
pen.penup()/pen.pendown():抬笔移动到起点,避免绘制不同多边形之间的多余线条- 你的示例数据中每行最后一个坐标和第一个坐标相同,所以绘制到最后一个点时会自动闭合多边形
完整可运行代码
把两部分代码合并即可:
import turtle import os file_path = os.path.join(os.path.dirname(__file__), 'plotpoints.txt') polygons = [] with open(file_path, "r") as plotme: for line in plotme: coords_str = line.strip().split(",") coords = [] for i in range(0, len(coords_str), 2): x = int(coords_str[i]) y = int(coords_str[i+1]) coords.append((x, y)) polygons.append(coords) pen = turtle.Turtle() pen.speed(0) for poly in polygons: pen.penup() pen.goto(poly[0]) pen.pendown() for (x, y) in poly[1:]: pen.goto(x, y) pen.penup() turtle.done()
额外实用提示
- 如果坐标数值太大导致画布显示不全,可以用
turtle.screensize(1000, 800)调整画布大小(参数为宽和高) - 想给不同多边形设置不同颜色,可以在循环里加入
pen.color(random.choice(["red", "blue", "green"])),记得提前导入random模块
内容的提问来源于stack exchange,提问作者MatBab
相关产品推荐
相关产品推荐

