Pygame在顶部设置窗口而不改变它的位置

时间:2014-08-19 10:54:08

标签: python pygame

正如我在以下主题中找到的那样:How to make python window run as "Always On Top"?

我知道怎么把窗户放在上面。但我想保持同样的立场。 autor说他找到了解决x和y值的工作。我想知道如何实现这一目标!

如何获取pygame窗口的x,y值?也许这是一种错误的做法。

我正在寻找的效果是当我通过一些函数调用触发它时窗口会显示在顶部。

对于那些了解英雄联盟的人来说,当游戏开始时,窗口会在顶部并保持相同的坐标。

3 个答案:

答案 0 :(得分:3)

我找到了一个似乎做得很好的解决方案:

#!/usr/bin/python
# -*- coding: utf-8 -*-


from ctypes import windll, Structure, c_long, byref #windows only


class RECT(Structure):
    _fields_ = [
    ('left',    c_long),
    ('top',     c_long),
    ('right',   c_long),
    ('bottom',  c_long),
    ]
    def width(self):  return self.right  - self.left
    def height(self): return self.bottom - self.top


def onTop(window):
    SetWindowPos = windll.user32.SetWindowPos
    GetWindowRect = windll.user32.GetWindowRect
    rc = RECT()
    GetWindowRect(window, byref(rc))
    SetWindowPos(window, -1, rc.left, rc.top, 0, 0, 0x0001)

现在将窗口置于顶部,只需调用onTop(pygame.display.get_wm_info()[' window'])来处理你的pygame窗口。

答案 1 :(得分:1)

使用相同的function

是一个更短的解决方案
from ctypes import windll
SetWindowPos = windll.user32.SetWindowPos

NOSIZE = 1
NOMOVE = 2
TOPMOST = -1
NOT_TOPMOST = -2

def alwaysOnTop(yesOrNo):
    zorder = (NOT_TOPMOST, TOPMOST)[yesOrNo] # choose a flag according to bool
    hwnd = pygame.display.get_wm_info()['window'] # handle to the window
    SetWindowPos(hwnd, zorder, 0, 0, 0, 0, NOMOVE|NOSIZE)

答案 2 :(得分:0)

获取当前窗口位置:

x = rect.left
y = rect.top
import os
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)

将窗口置于前台:

<button class="see" price="5">First</button>
<button class="see" price="8">Second</button>
<button class="see" price="10">Third</button>