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

Tkinter调用widget.pack()无法恢复已pack_forget组件问题求助

Tkinter组件pack后无法显示的修复方案

问题原因

  1. Text组件尺寸设置错误:Tkinter的Text组件中,height参数代表行数,width代表字符数,你设置了height=800,会让Text组件高度远超800像素的窗口,导致后续pack的name输入框被挤到窗口可视区域外,看起来像是未显示。
  2. 全局变量作用域问题:editTrue和editFalse函数中修改的edit是局部变量,不会改变全局的edit值,虽不影响组件显示,但会导致逻辑判断失效。

修正后的代码

import tkinter

top = tkinter.Tk()

top.geometry("800x800")
top.title("Text Editor")

edit = False
name = tkinter.Entry(top)

def editTrue():
    global edit
    edit = True
    name.pack_forget()

def editFalse():
    global edit
    edit = False
    name.pack()

menubar = tkinter.Menu(top)
filemenu = tkinter.Menu(menubar, tearoff=0)
filemenu.add_command(label="New", command=editFalse)
filemenu.add_command(label="Edit", command=editTrue)
menubar.add_cascade(label="File", menu=filemenu)
top.config(menu=menubar)

# 修正Text组件尺寸,设置合理的行数和字符数
text = tkinter.Text(top, height=30, width=80)

def saveNotes():
    notes = text.get(1.0, "end")
    with open(name.get() + ".txt", "a") as f:
        f.write(notes)  

button = tkinter.Button(top, text="Save", command=saveNotes)

button.pack()
name.pack()
text.pack()

top.mainloop()

优化建议

如果你希望Text组件自动填充剩余窗口空间,可替换固定尺寸为自适应布局,避免组件被挤到可视区域外:

text = tkinter.Text(top)
text.pack(fill=tkinter.BOTH, expand=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:27:38