4

python (2.6) 中是否有跨平台方法来获取显示器的刷新率?如果有帮助,我正在使用 Pygame 和 PyOpenGL。

我不需要改变刷新率,我只需要知道它是什么。

4

3 回答 3

6

我不确定您使用的平台,但在窗口上您可以使用 ctypes 或 win32api 获取有关设备的详细信息,例如使用 win32api

import win32api

def printInfo(device):
    print((device.DeviceName, device.DeviceString))
    settings = win32api.EnumDisplaySettings(device.DeviceName, -1)
    for varName in ['Color', 'BitsPerPel', 'DisplayFrequency']:
        print("%s: %s"%(varName, getattr(settings, varName)))

device = win32api.EnumDisplayDevices()
printInfo(device)

我的系统上的输出:

\\.\DISPLAY1 Mobile Intel(R) 945GM Express Chipset Family
Color: 0
BitsPerPel: 8
DisplayFrequency: 60
于 2009-08-04T04:40:50.193 回答
0

在 macOS 上,您可以使用pyobjc查询所有连接的显示器的刷新率。为此,您需要Cocoa(即“AppKit”)框架:

$ python3 -m venv screen-res
$ . ./screen-res/bin/activate
$ pip install pyobjc-framework-Cocoa

然后,在 Python 中:

from AppKit import NSScreen

for each in NSScreen.screens():
    print(f"{each.localizedName()}: {each.maximumFramesPerSecond()}Hz")

在我的系统上,这会产生:

LG HDR WQHD+: 120Hz
Built-in Retina Display: 120Hz

(这是正确的,我的显示器确实都设置为 120Hz 刷新率。)

在 Linux 上,您可以使用python-xlib

from Xlib import display
from Xlib.ext import randr
d = display.Display()
default_screen = d.get_default_screen()
info = d.screen(default_screen)

resources = randr.get_screen_resources(info.root)
active_modes = set()
for crtc in resources.crtcs:
    crtc_info = randr.get_crtc_info(info.root, crtc, resources.config_timestamp)
    if crtc_info.mode:
        active_modes.add(crtc_info.mode)

for mode in resources.modes:
    if mode.id in active_modes:
        print(mode.dot_clock / (mode.h_total * mode.v_total))

将适当的屏幕索引号与您希望打开 PyOpenGL 窗口的位置相关联留给读者作为练习:)。

(我不会在这里复制 Anurag 对 Windows 的回答,尤其是因为我无法对其进行测试,但这就是您在该平台上的做法。)

于 2022-02-04T23:50:09.647 回答
-4

您可以使用 pygame 时钟

fps = 60
clock = pygame.time.Clock()

在代码的最后: clock.tick(fps)

于 2020-08-18T13:02:17.753 回答