给定x/y坐标与宽高用Tkinter绘制三角形无显示问题咨询
问题排查与修复
你的代码运行后无内容,核心问题包含坐标计算逻辑错误,同时还有参数传值的低级问题:
create_polygon绘制三角形需要传入3个顶点合计6个坐标值(格式为[顶点1x, 顶点1y, 顶点2x, 顶点2y, 顶点3x, 顶点3y]),你写的points列表只有4个值,仅能定义2个点,根本无法生成闭合的三角形图形。- 坐标计算完全混淆了x、y轴的维度:你把垂直高度
h的偏移错误叠加到了x轴坐标上,没有按照「水平偏移对应宽度w、垂直偏移对应高度h」的规则计算底角坐标。 - 额外的不规范逻辑:
canvas.pack()被放在了triangle绘制函数内部,每次调用绘制方法都会重复执行布局操作,虽然不会直接导致图形不显示,但属于布局位置错误,应该放在画布初始化阶段执行。
正确的坐标计算逻辑
如果你要绘制的是以传入的(x,y)为顶部尖点、w为底边总宽度、h为垂直高度的等腰三角形,三个顶点的坐标计算规则为:
- 顶部尖点:直接使用传入的
(x, y) - 左下角点:水平向左偏移宽度的一半,垂直向下偏移整个高度,即
(x - w/2, y + h) - 右下角点:水平向右偏移宽度的一半,垂直向下偏移整个高度,即
(x + w/2, y + h)
修复后可运行代码
from tkinter import * tk = Tk() tk.geometry("600x600") canvas = Canvas(tk) # 画布布局放在初始化阶段,不要放入绘制函数 canvas.pack(fill=BOTH, expand=True) def triangle(x, y, w, h): points = [ x, y, x - w/2, y + h, x + w/2, y + h ] # 设置黑色边框,避免默认填充和背景同色看不到 canvas.create_polygon(points, outline="black") # 测试调用,参数可自行调整 triangle(300, 200, 100, 100) tk.mainloop()
内容的提问来源于stack exchange,提问作者just_a_kid_coder_123
相关产品推荐
相关产品推荐

