3

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

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

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

pb.pack_forget()

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

pb.destroy()

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

4

2 回答 2

5

你的问题的具体答案是pack_forgetgrid_forget或者grid_remove如果你想让一个小部件暂时不可见,你想要什么。您选择哪一个取决于您使用的是网格还是包,以及您是否希望网格记住它的位置,以便您以后可以将其放回同一位置。

destroy如果您想从字面上销毁小部件,则要调用它。

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

于 2013-07-16T15:56:42.770 回答
1

对不起,我的英语不好。这段代码对我有用。我只是按照奥克利的指示去做。

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()在加载程序循环之外进行了尝试。所以在完成加载后,它将从主应用程序窗口中消失。

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

于 2019-07-24T10:08:57.373 回答