Окно активации Tkinter в Windows XP

У меня есть небольшое приложение GUI, которое прослушивает сетевые сообщения, чтобы пользователь мог обновить некоторую информацию и принять ее. Это происходит в производственной фабричной среде и используется для взаимодействия с определенным куском физического оборудования (в некоторых случаях, по сериальному). Рабочий процесс выглядит следующим образом:

  • Пользователь взаимодействует с другой программой (5250 Green Screen)
  • Они вводят определенную привязку клавиш, которая отправляет сообщение UDP в графический интерфейс Tkinter
  • В графическом интерфейсе Tkinter выполняется deiconify ()
  • Пользователь редактирует данные, принимает (Enter) и выполняет идентификацию ()

Моя проблема в том, что в Windows XP графический интерфейс не становится активным, когда я делаю deiconify и, наоборот, не возвращается к предыдущему окну на значке. Я пробовал некоторые вещи, которые я нашел в других вопросах, таких как:

  • Установка self.wm_attributes("-topmost", 1) GUI как top .. self.wm_attributes("-topmost", 1)
  • Попытка установить / принудительно сфокусировать … self.focus_set() и self.focus_force()

Хотя окно видно с первого, я не могу заставить его быть активным окном, чтобы пользователь мог вводить его без «нажатия» на него для активации. То же самое справедливо и для выделения «фокуса», чтобы активное окно становилось тем, на котором они были ранее (5250).

Это похоже на проблему, которую другие также имели, но я не смог найти ничего, что сработает. Есть ли программный способ активировать окно и отпустить его, когда это будет сделано?

  • mainloop предотвращает запуск приложения Tkinter из IDLE
  • _tkinter.TclError: нет отображаемого имени и нет переменной окружения $ DISPLAY
  • Установить выделение жирным шрифтом выделенного текста с помощью тегов
  • Ошибка создания исполняемого файла с помощью cx_Freeze: IndexError: индекс tuple выходит за пределы диапазона
  • Как выбрать каталог и сохранить местоположение с помощью tkinter в Python
  • tkinter - Как установить шрифт для текста?
  • Можно ли получить настройки виджета в Tkinter?
  • Понимание лямбда в python и использование ее для передачи нескольких аргументов
  • One Solution collect form web for “Окно активации Tkinter в Windows XP”

    К сожалению, через неделю ответа не было, и я не смог найти прямой способ сделать это с помощью Tkinter. Я нашел способ решить проблему, хотя и, похоже, работает последовательно. Вот шаги, которые я предпринял, чтобы активировать экраны:

    • Установите pywin32.
    • Создайте функцию, которая активирует приложение tk.
    • Создайте функцию, которая активирует 5250.

    Затем каждый раз, когда я делаю iconify / deiconify, я также запускаю функцию для активации соответствующего экрана. Код, который активирует окно tk, выглядит следующим образом:

     def activate_self(self): """ Activate this window. """ shell = win32com.client.Dispatch('WScript.Shell') shell.AppActivate(str(self.title)) shell = None 

    Код, который активирует вызывающего абонента, немного уродлив, поскольку он должен угадывать заголовок, но является той же базовой концепцией.

    Python - лучший язык программирования в мире.