代码之家  ›  专栏  ›  技术社区  ›  yukashima huksay

如何使用tkinter。place()?

  •  1
  • yukashima huksay  · 技术社区  · 7 年前

    这是我的代码:

    from tkinter import *
    root = Tk()
    entry = Entry(
        root,
        width=50
    )
    frame = Frame(
        root,
        height=10,
        width=50,
        background="#caeaa9"
    )
    dropdown = Listbox(
        frame,
        background="#11FF11",
        height=5,
        width=50
    )
    listbox = Listbox(
        frame,
        background="#FF1111",
        height=10,
        width=50
    )
    entry.pack()
    listbox.pack()
    dropdown.place()
    frame.pack()
    mainloop()
    

    但是当我运行它时,下拉列表不会出现。我错过了什么?

    顺便说一句,我希望下拉列表的上边框正好在列表框的上边框上,并且两者都在条目的正下方。

    3 回复  |  直到 6 年前
        1
  •  2
  •   yukashima huksay    7 年前

    我强烈建议你不要使用 place 几何体管理器。 如果要创建更大或更复杂的接口,必须 小部件很糟糕。我建议使用 grid 相反:

    import tkinter as tk
    # Avoid wildcard imports!
    
    root = tk.Tk()
    
    entry = tk.Entry(
        root,
        width=50
    )
    
    frame = tk.Frame(
        root,
        background="#caeaa9"
    )
    
    listbox = tk.Listbox(
        frame,
        background="#FF1111",
        height=10,
        width=50
    )
    
    dropdown = tk.Listbox(
        frame,
        background="#11FF11",
        height=5,
        width=50
    )
    
    entry.pack()
    listbox.grid(column=0, row=0, sticky=N)
    dropdown.grid(column=0, row=0, sticky=N)
    frame.pack()
    
    root.mainloop()
    
        2
  •  2
  •   Bryan Oakley    7 年前

    你有两个问题:

    1. place 小部件的放置位置
    2. 下拉列表的堆叠顺序(z索引)落后于(低于)其他列表框,因此它将显示在列表框下。

    位置

    in_ 参数使坐标相对于其他列表框,然后使用其他 把它放在你想要的地方。

    例子:

    dropdown.place(in_=listbox, x=0, y=0, anchor="nw", relwidth=1.0, relheight=.5)
    

    所有小部件都有一个堆叠顺序。有些人称之为z指数。默认情况下,顺序是小部件的创建顺序。由于在另一个列表框之前创建下拉列表,因此另一个列表框具有更高的堆叠顺序。这意味着它将出现在下拉列表上方。

    一个简单的解决方案是最后创建下拉列表。如果你不想那样做,你可以打电话给 lift 举起 是您想要在上面显示的小部件的名称。

    例子:

    dropdown.lift(listbox)
    
        3
  •  1
  •   Shivam Kumraa    5 年前

    下面是代码示例:

    from tkinter import *
    
    window = Tk()
    
    Button(window,text = "Click Me").place(x = 50,y = 50)
    
    window.mainloop()
    

    有关更多信息,请参阅本教程 tkinter place