【问题标题】:Tkinter in Python - Remove widget from active windowPython中的Tkinter - 从活动窗口中删除小部件
【发布时间】:2013-07-14 18:22:20
【问题描述】:

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

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

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

pb.pack_forget()

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

pb.destroy()

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

【问题讨论】:

  • 我很难相信调用pack_forget() 会导致窗口冻结。你是说如果你有一个工作程序,并且只输入一行,程序就会冻结?您是否偶然在同一框架中同时使用了 pack 和 grid?
  • 你是对的 - 问题是我也在使用网格配置(甚至没有意识到)。我已经删除了这些,现在pack_forget() 不会导致应用程序冻结 - 但是我遇到与使用 destroy() 相同的错误 - 进度条的一部分消失了。消失的部分似乎与下面包含文本的标签的宽度完全相同......
  • 事件循环是否正在运行? “进度条的一部分消失了”听起来好像事件循环没有运行,所以屏幕重绘请求没有被兑现。
  • root.mainloop() 正在运行,如果这是事件循环的意思
  • 是的,这就是我所指的。

标签: python user-interface widget window tkinter


【解决方案1】:

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

destroy 是您想要从字面上销毁小部件时要调用的名称。

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

【讨论】:

    【解决方案2】:

    对不起,我的英语不好。 这段代码对我有用。我只是按照 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()。所以之后 完成加载,它将从主应用程序窗口中消失。

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

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多