在Tkinter中自定义表格组件遇显示问题求助
问题分析与解决方案
你的代码存在三个核心问题导致表格不显示:
- 从未调用表格生成函数:定义了
table函数但没有执行,根本没创建表格控件 - 多余的
self参数:table不是类方法,self参数无意义,会导致调用报错 - Frame放置位置错误:
canvas.create_window(500,500)把Frame放在了Canvas可视区域外(Canvas尺寸为500x500,坐标(500,500)是右下角的边界点,Frame会被挤出画布)
修改后的完整代码
from tkinter import * root = Tk() root.geometry("500x500") def clicked(): print("clicked") canvas = Canvas(root, height=500, width=500, background="blue") canvas.pack() frame = Frame(canvas, background="red") # 把Frame的父组件设为Canvas更合理 def table(frame): for i in range(total_rows): for j in range(total_columns): e = Entry(frame, width=20, fg='blue', font=('Arial',16,'bold')) e.grid(row=i, column=j) e.insert(END, lst[i][j]) lst = [(1,'first','last',19), (2,'fname','lname',18), (3,'name','nameeee',20), (4,'tsrif','tsal',21), (5,'bobby','bobberson',21)] total_rows = len(lst) total_columns = len(lst[0]) # 调用表格生成函数 table(frame) b = Button(canvas, text="test button", command=clicked) b.place(x=10, y=10) # 将Frame放在Canvas中心位置,anchor参数确保居中对齐 canvas.create_window(250, 250, window=frame, anchor=CENTER) root.mainloop()
额外优化说明
- 把Frame的父组件改为Canvas,逻辑上更合理(嵌入Canvas的组件父容器设为Canvas)
- 添加
anchor=CENTER参数,确保Frame在指定坐标处居中显示 - 移除了
table函数中多余的self参数,让函数可以正常调用
内容的提问来源于stack exchange,提问作者j.jam
相关产品推荐
相关产品推荐

