使用具有跨平台支持的python调整显示分辨率的大小

使用具有跨平台支持的python调整显示分辨率的大小,第1张

使用具有跨平台支持的python调整显示分辨率的大小

以下是在Windows上运行的解决方案(取决于pywin32)。有些占位符可用于放置现有的Linux代码,但是我不确定如何处理OSX。

from __future__ import print_functionimport sysclass ScreenRes(object):    @classmethod    def set(cls, width=None, height=None, depth=32):        '''        Set the primary display to the specified mode        '''        if width and height: print('Setting resolution to {}x{}'.format(width, height, depth))        else: print('Setting resolution to defaults')        if sys.platform == 'win32': cls._win32_set(width, height, depth)        elif sys.platform.startswith('linux'): cls._linux_set(width, height, depth)        elif sys.platform.startswith('darwin'): cls._osx_set(width, height, depth)    @classmethod    def get(cls):        if sys.platform == 'win32': return cls._win32_get()        elif sys.platform.startswith('linux'): return cls._linux_get()        elif sys.platform.startswith('darwin'): return cls._osx_get()    @classmethod    def get_modes(cls):        if sys.platform == 'win32': return cls._win32_get_modes()        elif sys.platform.startswith('linux'): return cls._linux_get_modes()        elif sys.platform.startswith('darwin'): return cls._osx_get_modes()    @staticmethod    def _win32_get_modes():        '''        Get the primary windows display width and height        '''        import win32api        from pywintypes import DEVMODEType, error        modes = []        i = 0        try: while True:     mode = win32api.EnumDisplaySettings(None, i)     modes.append((         int(mode.PelsWidth),         int(mode.PelsHeight),         int(mode.BitsPerPel),         ))     i += 1        except error: pass        return modes    @staticmethod    def _win32_get():        '''        Get the primary windows display width and height        '''        import ctypes        user32 = ctypes.windll.user32        screensize = ( user32.GetSystemMetrics(0),  user32.GetSystemMetrics(1), )        return screensize    @staticmethod    def _win32_set(width=None, height=None, depth=32):        '''        Set the primary windows display to the specified mode        '''        # Gave up on ctypes, the struct is really complicated        #user32.ChangeDisplaySettingsW(None, 0)        import win32api        from pywintypes import DEVMODEType        if width and height: if not depth:     depth = 32 mode = win32api.EnumDisplaySettings() mode.PelsWidth = width mode.PelsHeight = height mode.BitsPerPel = depth win32api.ChangeDisplaySettings(mode, 0)        else: win32api.ChangeDisplaySettings(None, 0)    @staticmethod    def _win32_set_default():        '''        Reset the primary windows display to the default mode        '''        # Interesting since it doesn't depend on pywin32        import ctypes        user32 = ctypes.windll.user32        # set screen size        user32.ChangeDisplaySettingsW(None, 0)    @staticmethod    def _linux_set(width=None, height=None, depth=32):        raise NotImplementedError()    @staticmethod    def _linux_get():        raise NotImplementedError()    @staticmethod    def _linux_get_modes():        raise NotImplementedError()    @staticmethod    def _osx_set(width=None, height=None, depth=32):        raise NotImplementedError()    @staticmethod    def _osx_get():        raise NotImplementedError()    @staticmethod    def _osx_get_modes():        raise NotImplementedError()if __name__ == '__main__':    print('Primary screen resolution: {}x{}'.format(        *ScreenRes.get()        ))    print(ScreenRes.get_modes())    #ScreenRes.set(1920, 1080)    #ScreenRes.set() # Set defaults


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5653982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存