私は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
。はこれらのパラメーターを無視します。
0x0001
SWP_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にクレジット。