5

私はPythonのxlibバインディングを使用して作成されたウィンドウマネージャーに取り組んでおり、(最初は)よりPython的な方法でdwmの動作を模倣しようとしています。必要なものはたくさんありますが、Xの組み込みのウ​​ィンドウ境界機能を使用してウィンドウのフォーカスを示すのに問題があります。

Xlibのウィンドウクラスのインスタンスがあり、ドキュメントを正しく読んでいると仮定すると、これは私がやりたいことを実行するはずです(少なくとも今のところ)-既存のウィンドウのウィンドウ境界を派手な色に設定して設定します境界線の幅を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ステートメントを追加して、プログラムがイベントに関連付けたコールバック関数を実際に実行していることを証明できますが、境界線の色はまったく変化しません。誰かが私がここで欠けているものを正確に特定できますか?それが助けになるなら、私はより完全な例をペーストビンすることができます。これが境界線を処理する唯一のビットであるため、正確にはわかりません。

4

1 に答える 1

4

これは完全なPEBKACのようです。私は答えを見つけました。基本的に、私はこれをしていました:

def set_active_border(self, window):
    border_color = self.colormap.alloc_named_color(
        "#ff00ff"
    ).pixel
    window.configure(border_width=2)
    window.change_attributes(
         None,
         border_pixel=border_color,
         border_width=2)
    self.dpy.sync()

どうやら、これは X を混乱させ、何もしていないようでした。私が見つけた解決策は、次のように、window.change_attributes() 呼び出しから border_width 部分を削除することでした。

def set_active_border(self, window):
    border_color = self.colormap.alloc_named_color(
        "#ff00ff"
    ).pixel
    window.configure(border_width=2)
    window.change_attributes(
        None,
        border_pixel=border_color
    )
    self.dpy.sync()

これが後で誰かに役立つことを願っています!

于 2012-04-22T13:27:15.243 に答える