Запуск внешнего процесса после открытия нового окна tkinter. [Питон]

Я работаю над программой, в которой есть окно «Подождите, пока выполняется действие». Это окно должно оставаться открытым во время выполнения пакетного файла. Окна закрываются после завершения пакетного процесса. Я использую метод Python .after() для вызова пакетного процесса после открытия окна. Проблема заключается в том, что по истечении времени, установленного в .after(), окно закрывается и снова открывается, становится белым и не отображает никакого текста. Вот соответствующий код.

   def backupCallBack(self, event):
      self.backupCB = Toplevel()
      self.backupCB.grab_set()
      self.backupCB.transient(self.exportGUI)

      message = "Please wait while the\ndatabase is backed up..."
      Label(self.backupCB, text=message, padx=100, pady=20).pack()

      event.after(200,self.runBackup)

   def runBackup(self):
      name = Entry.get(self.backupEntry)

      self.backupWindow.destroy()
      self.exportGUI.destroy()

      os.system('.\\src\\backup.bat %s' % name)

      self.backupCB.destroy()

Окно «подождите» должно открываться и оставаться открытым на протяжении всего процесса пакетной обработки. Я неправильно использую .after()? Что было бы более подходящим способом для выполнения этой задачи? Спасибо за вашу помощь!


person Brad Conyers    schedule 05.07.2012    source источник


Ответы (1)


Метод after запускается self.runBackup через 200*мс*, ​​включая self.backupCB.destroy(), которое является вашим окном ожидания.
Если вы намерены ждать x времени, прежде чем окно будет уничтожено, вы можете подумать о перемещении os.system('.\\src\\backup.bat %s' % name) в backupCallBack над методом after (и измените 200 миллисекунд на что-то более существенное). В противном случае вам нужно будет выяснить, как вы можете установить условие, эквивалентное: if batch == done,

person Honest Abe    schedule 06.07.2012