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
相关产品推荐
相关产品推荐

