【问题标题】:tkinter: Destroying frames with key press leaves container behindtkinter:用按键破坏框架会留下容器
【发布时间】:2021-08-24 01:44:11
【问题描述】:

代码如下:

import tkinter as tk

app = tk.Tk()
container = tk.Frame(app, bg="yellow")
container.pack(side=tk.LEFT)

children = []
for i in range(2):
    child = tk.Frame(container, bg="red", height=30, width=30)
    child.pack(side=tk.LEFT)
    children.append(child)

def on_key_press(event):
    children[-1].destroy()
    del children[-1:]
app.bind('<KeyPress>', on_key_press)

#children[0].destroy()     <------- This works and does not leave a yellow square behind.
#children[1].destroy()

按任意键两次会留下一个黄色方块(我假设来自容器)。发生了什么?

如果我取消注释上面的注释代码,我在运行代码时看不到黄色方块。

【问题讨论】:

  • 一切都会在后面留下一个黄色方块。那是他们主人的颜色

标签: python tkinter


【解决方案1】:

当您删除倒数第二个子项时,几何管理器仍然控制着容器,因此容器会缩小。当您删除最后一个孩子时,几何管理器不再控制容器,因此它保持相同的大小。

如果您知道要删除最后一个子项,则可以将宽度和高度显式设置为一个像素,也可以打包一个 1x1 像素的小部件以强制框架缩小。

【讨论】:

  • 你指的是container小部件的几何管理器吗?
  • @Gradient:我指的是pack,您可以使用它向容器添加小部件。只要容器中至少有一个使用pack 的小部件,pack 就控制容器的大小。
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2012-05-16
  • 2020-08-05
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多