Запуск внешнего процесса после открытия нового окна 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)


arrow_upward
1
arrow_downward

Метод 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