Python - TKinter - 销毁小部件而不降低框架高度

时间:2013-11-17 16:45:47

标签: python tkinter height frame

我正在拥有并发布我在游戏中有框架的地方,显示游戏的当前进度(让我们称之为框架;“结果”)。

如果玩家选择开始一个新游戏,结果中的所有小部件都会被破坏,并且忘记将框架隐藏起来直到再次使用它。

现在我遇到的问题是;当结果被回调时,它位于两个其他帧之间。但是,在小部件被销毁之前,它已经包含了所有小部件,它仍然保持了之前游戏的大小。小部件没有显示在框架中,但它仍然是小部件在那里时的大小。

只要在结果中放置新的窗口小部件,大小就会得到纠正,但我无法弄清楚如何制作height = 0。我尝试了results.config(height=0)但是没有用。

有谁知道如何将帧的大小“重置”为0?

对于众所周知的“文本墙”感到抱歉,但我找不到以紧凑的方式提供代码的方法。

由于

1 个答案:

答案 0 :(得分:2)

如果我完全理解你想要的东西,那么这个插图是正确的:

蓝色是结果框架

enter image description here

结果已删除,其他所有内容都已调整大小:

enter image description here

相应的代码如下:

import tkinter

RESULTS_WIDTH = 128

root = tkinter.Tk()

left_frame = tkinter.Frame(root, height=64, bg='#cc3399')
right_frame = tkinter.Frame(root, height=64, bg='#99cc33')

def rem_results(event):
    # Remove widget
    results.destroy()
    # Resize other widthets
    left_frame.config(width=128 + RESULTS_WIDTH/2)
    right_frame.config(width=128 + RESULTS_WIDTH/2)
    # Reposition other widgets
    left_frame.grid(row=0, column=0)
    right_frame.grid(row=0, column=1)

def add_results(event):
    # Create results widget
    global results
    results = tkinter.Frame(root, width=RESULTS_WIDTH, height=64, bg='#3399cc')
    results.grid(row=0, column=1)
    # Resize other widgets
    left_frame.config(width=128)
    right_frame.config(width=128)
    # Reposition other widgets
    left_frame.grid(row=0, column=0)
    right_frame.grid(row=0, column=2)

# Initialize results
add_results(None)

# Bind actions to <- and -> buttons
root.bind( '<Left>', rem_results )
root.bind( '<Right>', add_results )

#$ Enter eventloop
root.mainloop()