Python Tkinter在Windows XP上激活窗口

Python Tkinter在Windows XP上激活窗口,python,python-3.x,tkinter,python-3.4,Python,Python 3.x,Tkinter,Python 3.4,我有一个小型GUI应用程序,可以监听网络消息,这样用户就可以更新一些信息并接受它。这是在生产工厂环境中,用于与特定物理硬件进行交互(在某些情况下通过串行方式)。工作流如下所示: def activate_self(self): """ Activate this window. """ shell = win32com.client.Dispatch('WScript.Shell') shell.AppActivate(str(self.title)) shell

我有一个小型GUI应用程序,可以监听网络消息,这样用户就可以更新一些信息并接受它。这是在生产工厂环境中,用于与特定物理硬件进行交互(在某些情况下通过串行方式)。工作流如下所示:

def activate_self(self):
    """ Activate this window. """
    shell = win32com.client.Dispatch('WScript.Shell')
    shell.AppActivate(str(self.title))
    shell = None
  • 用户正在与另一个程序交互(5250绿色屏幕)
  • 它们输入一个向Tkinter GUI发送UDP消息的特定键绑定
  • Tkinter GUI执行一个deiconify()
  • 用户编辑数据,接受(输入)并执行图标化()
我的问题是,在windows XP上,当我执行去锥形化时,GUI不会变为活动状态,相反,也不会返回到iconify上的前一个窗口。我尝试了在其他问题中发现的一些东西,例如:

  • 将Tk GUI设置为top<代码>self.wm\u属性(“-top”,1)
  • 正在尝试设置/强制聚焦
    self.focus\u set()
    self.focus\u force()
虽然第一个窗口是可见的,但我似乎无法让它成为活动窗口,以便用户可以在没有“单击”激活它的情况下键入它。释放“焦点”时也是如此,以便活动窗口变为之前的窗口(5250)


这似乎是一个其他人也有过的问题,但我没有找到任何有效的方法。是否有一种编程方法可以激活窗口并在完成后释放它?

不幸的是,一周后没有答案,我无法找到一种直接的方法来使用Tkinter。不过,我确实找到了解决问题的方法,而且似乎一直有效。以下是我为激活屏幕所采取的步骤:

  • 安装pywin32
  • 创建一个激活tk应用程序的函数
  • 创建激活5250的功能
然后,每次执行图标化/去图标化时,我也会运行该功能来激活相应的屏幕。激活tk窗口的代码如下所示:

def activate_self(self):
    """ Activate this window. """
    shell = win32com.client.Dispatch('WScript.Shell')
    shell.AppActivate(str(self.title))
    shell = None
激活调用者的代码有点难看,因为它必须猜测标题,但基本概念相同