Python中的Tkinter - 从活动窗口中删除小部件

时间:2013-07-16 14:06:38

标签: python user-interface widget window tkinter

我正在尝试从活动窗口中删除Tkinter进度条小部件(在使用Tkinter的GUI窗口初始化之后)。我正在为我的窗口使用Tkinter Frame。我已将进度条初始化为pb,如下所示。

pb = ttk.Progressbar(root,orient ="horizontal",length = 540, mode ="determinate")

然后我尝试了两种不同的方法来摆脱进度条。下面的行导致窗口冻结并在初始化GUI后尝试使用时停止响应。

pb.pack_forget()

下面的行只会导致进度条的中间部分消失,但您仍然可以看到它的两面。

pb.destroy()

在Frame初始化之后,有什么方法可以让这个小部件消失吗?

2 个答案:

答案 0 :(得分:5)

您的问题的具体答案是pack_forgetgrid_forgetgrid_remove是您想要使窗口小部件暂时不可见的内容。您选择哪一个取决于您是否使用网格或包,以及您是否希望网格记住它的位置,以便稍后将其放回同一位置。

destroy是您想要彻底销毁小部件的内容。

如果使用得当,这些方法都不会导致程序冻结。如果没有看到您的代码,就无法知道问题的根本原因是什么。

答案 1 :(得分:0)

对不起,我的英语不好。 这段代码对我有用。我只需遵循 Oakley的说明。

def progressBar(*args, **kwargs):

def progress(currentValue):
    progressbar["value"] = currentValue

maxValue = 100

progressbar = ttk.Progressbar((kwargs), orient="horizontal", length=150, mode="determinate", takefocus=True)
progressbar.pack(side=tk.BOTTOM)

currentValue = 0
progressbar["value"] = currentValue
progressbar["maximum"] = maxValue

divisions = 10
for i in range(divisions):
    currentValue = currentValue + 10
    progressbar.after(500, progress(currentValue))
    progressbar.update()  # Force an update of the GUI

progressbar.destroy()

因此,我只是在加载程序循环之外尝试了progressbar.destroy()。所以之后 完成加载后,它将从应用程序主窗口中消失。

谢谢您,布莱恩·奥克利先生。