Окно активации 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).

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

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 

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

Interesting Posts

Получение Python System Вызывает как строковые результаты

Как использовать Python для отправки многостраничного PDF-запроса на OneNote

Использование xlsxwriter в Google App Engine для Python

несколько баз данных и несколько моделей в django

datetime.now в python отличается при запуске локально и на сервере

Сервер Socket SIP для Python

Получение адреса из gdb.Value

Как проверить, установлен ли на моем компьютере IPython и какая последовательность для установки этих библиотек?

сохраняя только уникальные экземпляры списков, единственной разницей которых является порядок

Python, проверяющий все возможные пути в матрице, от одной точки к другой

Создание объекта из объекта базового класса в Python

Как отображать интерактивное изображение RGB, похожее на pyqtgraph ImageView?

import zlib ImportError: нет модуля с именем zlib

Проблемы с компоновкой Python 2.5.2 и Solaris 8 (gcc 3.4.2)

Как проверить список, содержащий NaN

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