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

Tkinter中在画布c1的框架f1b添加Entry输入框遇问题求助

解决Tkinter画布框架中Entry不显示的问题

嘿,我来帮你搞定这个Tkinter的问题!你遇到的情况是因为把框架放到画布上时,框架的大小设置和内部控件的布局没配合好,导致框架看起来没显示出来。下面给你详细分析和解决方案:

问题根源

  1. 你给框架f1b设置了固定的width=150和height=300,但Tkinter的框架默认会根据内部控件的布局自动调整大小,这个固定尺寸可能没按预期生效;
  2. 你给Entry用了grid(row=3, column=4),这个位置离框架左上角太远,框架需要被撑得很大才能容纳它,但框架本身没有被正确撑开,所以看起来框架和Entry都没显示。

解决方案

方案1:让框架自适应内部控件大小

去掉框架的固定宽高,调整Entry的布局位置,让框架自动被内部Entry撑开:

from Tkinter import * 
root = Tk() 

f1 = Frame(root, bg="cyan") 
f1.pack(side=LEFT, fill=BOTH, expand=YES) 

f1a = Frame(f1, bg="gold", height=100, width=100) 
f1a.grid(row=0, column=0, rowspan=2, columnspan=2, padx=10, pady=10) 

c1 = Canvas(f1, height=400, width=800, bg="snow") 
c1.create_rectangle(50,50,750,100) 
c1.create_rectangle(50,130,750,200) 
c1.create_rectangle(50,220,750,300) 
c1.create_text(100,70,text="Sensor1", font=40) 
c1.create_text(100,170,text="Sensor2", font=40) 
c1.create_text(100,260,text="Sensor3", font=40) 
c1.grid(row=3, column=3) 

# 移除框架的固定宽高,让它自适应内容
f1b = Frame(c1, bd=3, highlightcolor="black", highlightthickness=1, highlightbackground="black", relief=RAISED) 
# 将Entry放在框架的左上角位置
e1 = Entry(f1b, width=10)
e1.grid(row=0, column=0, padx=10, pady=10) 

# 将框架添加到画布,设置anchor确保居中显示
c1.create_window(420, 160, window=f1b, anchor=CENTER) 

root.mainloop()

方案2:保持框架固定大小

如果你需要框架保持150x300的固定尺寸,可以阻止框架根据内容调整大小,同时确保Entry在框架内的可见位置:

from Tkinter import * 
root = Tk() 

f1 = Frame(root, bg="cyan") 
f1.pack(side=LEFT, fill=BOTH, expand=YES) 

f1a = Frame(f1, bg="gold", height=100, width=100) 
f1a.grid(row=0, column=0, rowspan=2, columnspan=2, padx=10, pady=10) 

c1 = Canvas(f1, height=400, width=800, bg="snow") 
c1.create_rectangle(50,50,750,100) 
c1.create_rectangle(50,130,750,200) 
c1.create_rectangle(50,220,750,300) 
c1.create_text(100,70,text="Sensor1", font=40) 
c1.create_text(100,170,text="Sensor2", font=40) 
c1.create_text(100,260,text="Sensor3", font=40) 
c1.grid(row=3, column=3) 

# 设置框架固定大小
f1b = Frame(c1, width=150, height=300, bd=3, highlightcolor="black", highlightthickness=1, highlightbackground="black", relief=RAISED) 
# 阻止框架根据内容调整大小
f1b.grid_propagate(0)
# 将Entry放在框架内合理的位置
e1 = Entry(f1b, width=10)
e1.grid(row=0, column=0, padx=10, pady=10) 

c1.create_window(420, 160, window=f1b, anchor=CENTER) 

root.mainloop()

关键修改点说明

  • 移除或调整框架的固定宽高,让框架能正确适配内部控件;
  • 调整Entry的grid行列位置到框架内的可见区域(比如row=0, column=0);
  • 使用grid_propagate(0)可以强制框架保持固定大小,适合需要固定布局的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:45:11