私はPythonのxlibバインディングを使って書かれたウィンドウマネージャーで作業していますが、私はdwmの動作をもっとpythonicな方法で模倣しようとしています。私は必要なものをたくさん得ていますが、Xの組み込みウィンドウ機能を使ってウィンドウのフォーカスを指示するのに問題があります。Python xlibでのウィンドウの枠線の描画
Xlibのウィンドウクラスのインスタンスがあり、ドキュメントを正しく読んでいるとすれば、これは(少なくとも今のところは)私がしたいことを行うはずです - 既存のウィンドウのウィンドウ境界をa華やかな色と2pxに境界線の幅を設定します。
def set_active_border(self, window):
border_color = self.colormap.alloc_named_color(\
"#ff00ff").pixel
window.change_attributes(None,border_pixel=border_color,
border_width = 2)
self.dpy.sync()
はしかし、私はこのことから何を取得 - 私は私のプログラムは、実際に私がイベントに関連付けられたコールバック関数を実行しているが、私は国境に全く色の変化を取得していないことを証明するためにprint文を追加することができます。誰かが私がここで逃しているものを正確に特定できますか?それが助けになるなら、私はもっと完全な例をペーストすることができます。私はそれが唯一の境界を処理するビットですが、確かにそれは確信していません。
Python Xlibバインディングは、基礎となるXlib関数を直接変換するようです.Xlibでは、XChangeWindowAttributes()はborder_width属性を受け入れません。ウィンドウマネージャは通常、XConfigureWindow()またはXSetWindowBorderWidth()を呼び出してborder_widthを設定します。 – ottomeister
Gaah。私が言っていることはこれです:あなたがまだそれをやっていないのなら、change_attributes()を呼び出す前にset_active_border()関数のwindow.configure(border_width = 2)を呼び出してみてください。 (私はXSetBorderWidth()のためのPythonバインディングを見ません。)XSetWindowBorderWidth()。 – ottomeister
これまでにconfigure(border_width = 2)の呼び出しがありましたが、コメントアウトされました。アプローチは機能していないようです。私は試しました: window.configure(border_width = 2); window.change_attributes(...)とwindow.change_attributes()だけを使用します。まだダイスはありません。私はさらに情報があるときに報告します。 – bbenne10