Tkinter调用widget.pack()无法恢复已pack_forget组件问题求助
Tkinter组件pack后无法显示的修复方案
问题原因
- Text组件尺寸设置错误:Tkinter的
Text组件中,height参数代表行数,width代表字符数,你设置了height=800,会让Text组件高度远超800像素的窗口,导致后续pack的name输入框被挤到窗口可视区域外,看起来像是未显示。 - 全局变量作用域问题:
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
相关产品推荐
相关产品推荐

