python - 如何使用 tkinter.place()?

标签 python user-interface tkinter

我想要一个条目,并且我想要在它下面有一个固定大小的列表框,该列表框是固定的。我想要另一个动态高度的列表框。它会随着时间的推移出现和消失,并且大小也会改变。我希望第二个列表框(实际上是一个下拉列表)显示在我希望修复的另一个列表框上。我用于更改大小等的代码是正确的,并且与 pack() 完美配合,但随着大小的变化,它会上下移动另一个列表框。当我将 pack() 更改为 place(...) 时,它根本不再显示。

这是我的代码:

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()

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

顺便说一句,我希望下拉列表的顶部边框恰好位于列表框的顶部边框上,并且它们都位于条目下方。

最佳答案

我强烈建议您不要使用地点几何管理器。 永远。如果您想创建更大或更复杂的界面,则必须放置小部件是很糟糕的。我建议使用 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()

关于python - 如何使用 tkinter.place()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46382129/

相关文章:

python - 能够使用 ffmpeg 和 python 读取当前音频帧

java - 遇到编译器错误 : Exception in Application start method.(这是简单的 JavaFX 程序)

tkinter - 从 tkinter 中的 TreeView 获取数据

python - 在标签中显示函数的输出

python - 如何在套接字之间正确中继 TCP 流量?

python - 在 AzureML 中未获得预期输出

python - 回到基础 : Scrapy

c - 用于 linux c 的图形用户界面

java - Box.add() 线程安全吗?

python - 使用 .after 方法更新 Python Tkinter GUI