如何检测调整大小的窗口状态在pygame中和对Linux来说,去最大化?(How to detect

2019-10-19 00:53发布

我内置了蟒蛇与使用pygame的的应用,最初在设定的尺寸显示登录屏幕是不可调整大小,然后当用户登录到游戏中被用来变换窗口的大小保存的设置。 该窗口登录后变成RESIZABLE。 如果用户退出该窗口被改变回至初始尺寸而不RESIZABLE标志。 当用户从正常的窗口注销,但是当用户点击最大化按钮,然后在一些发行版的窗口仍然停留最大化注销和登录屏幕在窗口的左上角上漆一切,只要确定。

在这里,问题来了,是否有检测窗口是否已最大化,这样我就可以定型下来之前,去最大化的方法吗?

我找不到任何可以帮助我在pygame的文档或任何网上。 我发现,通过使用得到一个“手柄”,以窗口的方式:

pygame.display.get_wm_info()['window']

但不知道在哪里把它从这里开始。

我的方式设定尺寸:

self.screen = pygame.display.set_mode((800, 480)) #login screen
self.screen = pygame.display.set_mode(user_saved_size, pygame.RESIZABLE) #game screen

Answer 1:

get_wm_info()['wmwindow']给你WINDOWID在Windows管理器(X.org),但它是pygame的的“外部”。 也许用Python库Xlib ,你可以做一些事情。


编辑:

我试过例如设置运行的应用程序的窗口尺寸来改变终端的大小和它的作品,但它不会改变pygame的窗口大小。 我试图Xlib中获得pygame的窗口标题和它的作品,但我不能设置pygame的窗口caption.It似乎pygame的不尊重新标题。

我用这个代码来测试pygame的窗口标题 - 它可以得到说明,但它不能设置标题。

import sys

import pygame
from pygame.locals import *

import Xlib
import Xlib.display

WIDTH, HEIGHT = 1500, 300

pygame.init()

screen = pygame.display.set_mode((800,600),0,32)

print "wm_info:", pygame.display.get_wm_info()
print "  window:", pygame.display.get_wm_info()['window']
print "fswindow:", pygame.display.get_wm_info()['fswindow']
print "wmwindow:", pygame.display.get_wm_info()['fswindow']

display = Xlib.display.Display()
root = display.screen().root

#windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
#print "Xlib windowID:", windowID
#window = display.create_resource_object('window', windowID)

window = display.create_resource_object('window', pygame.display.get_wm_info()['window'])
window.configure(width = WIDTH, height = HEIGHT)
print "Xlib   window get_wm_name():", window.get_wm_name()

window = display.create_resource_object('window', pygame.display.get_wm_info()['fswindow'])
window.configure(width = WIDTH, height = HEIGHT)
print "Xlib fswindow get_wm_name():", window.get_wm_name()

window = display.create_resource_object('window', pygame.display.get_wm_info()['wmwindow'])
window.configure(width = WIDTH, height = HEIGHT)
print "Xlib wmwindow get_wm_name():", window.get_wm_name()

print

print "Xlib wmwindow set_wm_name(hello world of xlib)"
window.set_wm_name("hello world of xlib")
display.sync()

print "Xlib wmwindow get_wm_name():", window.get_wm_name()


# --------------

fpsClock = pygame.time.Clock()
RUNNING = True
while RUNNING:

    for event in pygame.event.get():
        if event.type==QUIT:
            RUNNING = False

        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                RUNNING = False

    fpsClock.tick(25)

# --------------

pygame.quit()
sys.exit()

我用这个代码来改变窗口大小 - 它在终端和DreamPie(蟒蛇壳)工作原理:

# https://unix.stackexchange.com/questions/5999/setting-the-window-dimensions-of-a-running-application

WIDTH, HEIGHT = 1500, 300
import Xlib
import Xlib.display

display = Xlib.display.Display()
root = display.screen().root
windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
window = display.create_resource_object('window', windowID)
window.configure(width = WIDTH, height = HEIGHT)
display.sync()

#windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
#for windowID in windowIDs:
#   window = display.create_resource_object('window', windowID)
#   name = window.get_wm_name() # Title
#   pid = window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType) # PID


文章来源: How to detect resizeable window state in pygame and de-maximize it in Linux?