4

毫无疑问,这是一个新手问题。我在 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()。

我错过了什么?

4

2 回答 2

3

您不能将小部件降低到其父级下方。根据官方 tk 文档

如果省略了 aboveThis 参数,则命令会引发 window 以便它在堆叠顺序中位于其所有兄弟姐妹之上(它不会被任何兄弟姐妹遮挡,并且会遮挡与其重叠的任何兄弟姐妹)。如果指定了 aboveThis,那么它必须是一个窗口的路径名,它要么是窗口的兄弟,要么是窗口的兄弟的后代。在这种情况下, raise 命令会将 window 插入到 aboveThis 上方的堆叠顺序中(或作为 window 兄弟的 aboveThis 的祖先);这最终可能会提高或降低窗口。

(注意, tkraise命令lift()实际上是在最低级别调用)

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

food.grid(row=0, column=1, in_=frame)
pythons.grid(row=1, column=1, pady=10, in_=frame)
于 2012-08-08T02:10:04.057 回答
0

很抱歉,这两个版本的代码都没有为我做任何事情。但是,以下修改确实有效。诀窍是让列表框的父级是root而不是frame和拥有liftlower相对于frame. 我想知道这是否是由于不同版本的 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(root, width=10, height=5, selectmode=EXTENDED, exportselection=0)
food = Listbox(root, width=10, height=5, selectmode=EXTENDED, exportselection=0)
def hider():
    if pythons.selection_includes(4):
        food.lower(frame)
    elif pythons.selection_includes(0):
        food.lift(frame)
b2 = Button(frame, text="Hide!", command=hider)
b2.grid(row=2, column=1)

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

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

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


root.mainloop()
于 2013-07-08T23:15:15.437 回答