首页 > 解决方案 > Tkinter 不会将窗口与 pid 关联

问题描述

我正在使用来尝试查找与GUI 窗口wmctrl -lp关联的进程 ID 。tkinter但是,看起来 tkinter 窗口与 pid 无关。

0x06400010  0 0                     N/A tk

使用xprop,看起来该_NET_WM_PID属性未设置。

但是,我找不到任何方法来tkinter自动设置它,或者从我的 python 代码中显式设置它。

上下文是我有一个脚本来查找特定进程或其任何子进程“拥有”的任何窗口。但是该脚本找不到 tkinter 窗口,因为该脚本不认为它与创建窗口的 python 脚本的 pid 相关联。

非常感谢任何帮助。

编辑:进一步的怪异

似乎只有当我从 bash 脚本中运行 python 脚本时才会出现这个问题。

因此,如果我有一个 bash 脚本gui_from_bash_script.sh,上面写着:

#!/bin/bash

python my_gui.py

...然后我运行./gui_from_bash_script.sh,然后我得到了问题。

如果我只是python my_gui.py从终端运行,我不会遇到问题。

标签: pythontkintertkwindow-managerswmctrl

解决方案


我设法通过在创建root窗口时添加以下行来解决这个问题。

root = tk.Tk()
root.client(socket.gethostname())   # THIS LINE HERE

我还不明白为什么这会有所作为,但它似乎已经这样做了。

wmctrl -lp现在显示:

0x06400010  0 1234   my-host-name tk

推荐阅读