毫无疑问,这是一个新手问题。我在 Python 2.7 中使用 Tkinter 中的网格布局管理器。我想要一个按钮来隐藏单击时的列表框。到目前为止,这是我的代码:

from Tkinter import *
root = Tk()
frame = Frame(root)
pyList = ["Eric", "Terry", "Graham", "Terry", "John", "Carol?", "Michael"]
arbList = ['ham', 'spam', 'eggs', 'potatos', 'tots', 'home fries']
pythons = Listbox(frame, width=10, height=5, selectmode=EXTENDED, exportselection=0)
food = Listbox(frame, width=10, height=5, selectmode=EXTENDED, exportselection=0)
def hider():
    if pythons.selection_includes(4):
        food.lower()
    elif pythons.selection_includes(0):
        food.lift()
b2 = Button(frame, text="Hide!", command=hider)
b2.grid(row=2, column=1)
food.grid(row=0, column=1)
pythons.grid(row=1, column=1, pady=10)
frame.grid()

for python in pyList:
        pythons.insert('end', python)

for thing in arbList:
        food.insert('end', thing)


root.mainloop()

不幸的是,在这上面胡闹似乎会抛出一个错误,说我无法在框架上方或下方提升/降低我的列表框。我已经让它与 pack() 管理器一起工作,但不是 grid()。

我错过了什么?

最佳答案

您不能将小部件降低到其父级下方。根据 official tk docs :



(注意,tk raise 命令是 lift() 在最低级别实际调用的)

要获得您想要的效果,请制作框架和列表框兄弟,然后使用 in_ 参数将列表框打包在框架内:

food.grid(row=0, column=1, in_=frame)
pythons.grid(row=1, column=1, pady=10, in_=frame)

10-07 15:33