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

Tkinter通过输入三边长度在Canvas绘制三角形报参数缺失错误求助

报错原因

你在定义buttonclick1函数时,额外声明了a、b、c三个必填位置参数,但Tkinter的按钮触发回调函数时默认不会传入任何参数,因此调用时就会触发参数缺失的报错。同时你函数内部已经直接通过ent_a.get()等方式从输入框读取数值了,这三个形参属于冗余声明,没有实际作用。

解决方案

直接删除buttonclick1函数定义的三个形参即可解决报错,同时可额外增加输入合法性校验、三角形合法性判断、绘制前清空画布的逻辑优化使用体验。

修改后完整代码

from tkinter import *

root = Tk()
root.title("图形绘制")

def buttonclick1():
    # 清空画布原有内容
    cv.delete("all")
    try:
        a = int(ent_a.get())
        b = int(ent_b.get())
        c = int(ent_c.get())
    except ValueError:
        cv.create_text(250, 250, text="请输入合法的正整数边长", fill="red", font=("微软雅黑",14))
        return
    # 校验三边是否满足三角形构成条件
    if a <=0 or b <=0 or c <=0 or a + b <= c or a + c <= b or b + c <= a:
        cv.create_text(250, 250, text="输入的边长无法构成合法三角形", fill="red", font=("微软雅黑",14))
        return
    A = (0, 0)
    B = (c, 0)
    hc = (2 * (a**2*b**2 + b**2*c**2 + c**2*a**2) - (a**4 + b**4 + c**4))**0.5 / (2.*c)
    dx = (b**2 - hc**2)**0.5
    if abs((c - dx)**2 + hc**2 - a**2) > 0.01: 
        dx = -dx
    C = (dx, hc)
    coords = [int((x + 1) * 75) for x in A+B+C]
    cv.create_polygon(*coords, outline="black", fill="lightblue")

lb1 = Label(root, text="1.绘制三角形")
lb2 = Label(root, text="请输入三角形三条边的长度")

ent_a = Entry(root, width=20)
ent_b = Entry(root, width=20)
ent_c = Entry(root, width=20)

bt1 = Button(root, text="绘制三角形", command=buttonclick1)

cv = Canvas(root, width=500, height=500, bg="white")

lb1.grid(row=0, column=0)
lb2.grid(row=1, column=0, columnspan=3)
ent_a.grid(row=2, column=0)
ent_b.grid(row=2, column=1)
ent_c.grid(row=2, column=2)
bt1.grid(row=3, column=0, columnspan=3)

cv.grid(row=12, column=0, columnspan=3)

root.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:08