Tkinter,从执行按钮移除焦点,因此应用程序不会显示为冻结

时间:2013-12-01 01:51:55

标签: python tkinter

我见过类似的问题,说你应该只关注另一个小部件,这样在应用程序运行时按钮就不会显示为冻结状态。我想最终建立一个进度条,但是现在我只想点击运行按钮并释放焦点。

  ...
  main_menu = ttk.Frame(self.root)
  run_button = ttk.Button(main_menu, text="Run",
                            command=lambda self=self: self.execute_dummy())

  def execute_dummy(self):
    self.root.focus()
    #here I have a notebook also in the main frame, the third tab has an output buffer I want to switch too on execution
    self.main_notebook_frame.select(2)
    self.execute()

  def execute(self):
     #my class for handling the computation
     import gui_execute
     gui_execute()

运行按钮最终将切换到notebook_frame中的第三个选项卡,但仅在执行完成后才会切换。如果存在大的输入文件,则会出现问题。运行按钮看起来“冻结”,因为计算可能需要几分钟才能完成。无论如何我可以在执行之前切换到notebook_frame第三个选项卡吗?这是为了确保用户不冻结应用程序?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用after(time, function_name)直接在execute_dummy()中执行函数,但是在系统的主循环中执行。同时程序应该改变标签。

self.root.after(100, self.execute) # 100ms = 0.1 second