使用 widget.pack() 不会在 Tkinter 中恢复被遗忘的包小部件

问题描述 投票:0回答:2
import tkinter

top = tkinter.Tk()

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

edit = False
name = tkinter.Entry(top)

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

def editFalse():
    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 = tkinter.Text(top, height=800, width=800)


def saveNotes():
    notes = text.get(1.0, "end")

    f = open(name.get() + ".txt", "a")
    f.write(notes)  
    f.close()

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

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


top.mainloop()

到目前为止,这是我的代码,问题是,当我调用

widget.pack_forget()
函数时,它运行良好。它隐藏了它和所有这些东西。但是,当我再次调用
widget.pack()
来恢复它时,它没有出现。我不明白为什么。我会很感激一些帮助。

python python-3.x tkinter python-3.8 tkinter-entry
2个回答
0
投票

您的文本框太大,800 个字符宽度和 800 行高度。所以当

name
removed
name.pack_forget()
)然后再次shown
name.pack()
)时,它会被打包到文本框下面。由于文本框太大,
name
被推出了窗口的可视区域。

要么使文本框变小(

width=80, height=40
),要么使用name在文本框之前
pack
name.pack(before=text)
.


0
投票

当我再次调用 widget.pack() 来恢复它时,它没有出现 使用

lambda
而不是创建的函数。

  • 在第13行,在命令关键字中添加
    lambda
    pady
  • 在第 14 行,
    lambda
    在命令关键字中。
  • 第32行,在
    Entry
    小部件中添加pady=10。

片段:

import tkinter

top = tkinter.Tk()
top.geometry("800x800")
top.title("Text Editor")

edit = False
name = tkinter.Entry(top)


menubar = tkinter.Menu(top)
filemenu = tkinter.Menu(menubar, tearoff=0)
filemenu.add_command(label="New", command=lambda: name.pack(pady=10))
filemenu.add_command(label="Edit", command=lambda: name.pack_forget())
menubar.add_cascade(label="File", menu=filemenu)
top.config(menu=menubar)

text = tkinter.Text(top, height=40, width=80)


def saveNotes():
    notes = text.get(1.0, "end")

    f = open(name.get() + ".txt", "a")
    f.write(notes)  
    f.close()

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

button.pack()
text.pack()
name.pack(pady=10)
 
top.mainloop()

屏幕截图:您将看到条目小部件隐藏并显示在底部。

© www.soinside.com 2019 - 2024. All rights reserved.