10

私はPythonで小さなプログラムを実行しています。このプログラムは、他のすべてのウィンドウの上にとどまる必要がある小さなウィンドウを起動します。これはOS固有だと思いますが、GNOMEを使用したGNU-Linuxではどのように実行されますか?

[更新-Windows用ソリューション]

素敵な、私はそれが機能したと思います。Vista64ビットのEclipseでPygame1.9.1とともにPython2.5.4を使用しています。したがって、これはWindowsシステム用です。SetWindowPos関数はここに文書化されています。説明の中でこれを参照します。

輸入:

from ctypes import windll

次に、user32で「SetWindowPos」を呼び出す変数を設定します。

SetWindowPos = windll.user32.SetWindowPos

ここで、ウィンドウを作成したとしましょう。

screen = pygame.display.set_mode((100,100), pygame.NOFRAME)

次の行が鍵です。これにより、ウィンドウが他のウィンドウの上に表示されるように設定されます。

SetWindowPos(pygame.display.get_wm_info()['window'], -1, x, y, 0, 0, 0x0001)

基本的に、へhWndの呼び出しから返されたウィンドウIDを(ウィンドウハンドル)に指定しますdisplay.get_wm_info()。これで、関数は初期化したばかりのウィンドウを編集できます。

-1ですhWndInsertAfter。_

MSDNサイトによると:

ウィンドウは、hWndInsertAfterパラメーターをHWND_TOPMOSTに設定してSWP_NOZORDERフラグが設定されていないことを確認するか、ウィンドウの位置をZオーダーで設定して、既存の最上位ウィンドウの上に配置することにより、最上位ウィンドウにすることができます。最上位以外のウィンドウを最上位にすると、所有しているウィンドウも最上位になります。ただし、その所有者は変更されません。

したがって、は-1ウィンドウが他の既存の最上位ウィンドウの上にあることを確認しますが、これはすべての場合に機能するとは限りません。多分-2は-1を打ち負かしますか?それは現在私のために働いています。:)

xとはy、設定するウィンドウの新しい座標を指定します。SetWindowPos関数が呼び出されたときにウィンドウを現在の位置に維持したかったのです。残念ながら、現在のウィンドウ(x、y)の位置を関数に簡単に渡す方法が見つかりませんでした。回避策を見つけることができましたが、この質問に新しいトピックを導入するべきではないと思います。

0, 0,、ウィンドウの新しい幅と高さをピクセル単位で指定することになっています。ええと、その機能はすでにあなたのpygame.display.set_mode()関数にあるので、私はそれらを0のままにしました0x0001。はこれらのパラメーターを無視します。

0x0001SWP_NOSIZEに対応し、私の唯一のuFlagです。利用可能なすべてのuFlagのリストは、提供されているドキュメントページにあります。それらの16進表現の一部は次のとおりです。

  • SWP_NOSIZE = 0x0001
  • SWP_NOMOVE = 0x0002
  • SWP_NOZORDER = 0x0004
  • SWP_NOREDRAW = 0x0008
  • SWP_NOACTIVATE = 0x0010
  • SWP_FRAMECHANGED = 0x0020
  • SWP_SHOWWINDOW = 0x0040
  • SWP_HIDEWINDOW = 0x0080
  • SWP_NOCOPYBITS = 0x0100
  • SWP_NOOWNERZORDER = 0x0200
  • SWP_NOSENDCHANGING = 0x0400

それはそれであるはずです!それがあなたのために働くことを願っています!

彼の助けのためにjohn@johnnypops.demon.co.ukでジョンPopplewellにクレジット。

4

3 に答える 3

8

質問は、どのウィンドウ ツールキットを使用しているかということです。PyGTKと同様の教育を受けたグーグルは私にこれを与えました:


gtk.Window.set_keep_above

前述のように、この設定を尊重するかどうかはウィンドウ マネージャー次第です。

SDL固有のものを含めるように編集されまし た。SDL ウィンドウを上に置くことができることについては、こちらで説明しています。

于 2009-09-27T03:39:33.620 に答える
0

同様の問題を見つけようとしていたところ、Pmwモジュールを使用してこの解決策を見つけました

http://www.java2s.com/Code/Python/GUI-Pmw/Showglobalmodaldialog.htm

于 2010-08-04T14:36:41.900 に答える
0

私は本当にPythonのことをまったく知りませんが、グーグルで「pygtkを常にトップに」すると、次のようになりました。

http://www.mail-archive.com/pygtk@daa.com.au/msg01370.html

そこに投稿された解決策は次のとおりです。

transient.set_transient_for(main_window)

また、「x11 常に最上位」などを検索することもできます。根底にある概念は、ウィンドウマネージャーに、ウィンドウを他のウィンドウよりも上に保つ必要があるという「ヒント」を与えているようです。ただし、ウィンドウ マネージャは自由に制御でき、必要なことは何でも実行できます。

Fluxbox のようなウィンドウ マネージャーを使用するときのレイヤーの概念も見たので、ウィンドウが表示されるレイヤーを変更する方法があるかもしれません。

于 2009-09-27T01:34:26.333 に答える