Jul-06-2017, 03:16 PM
Please, if willing, try this snippet on Linux and OS-X
It works fine on windows (7)
here's a single monitor output example:
It works fine on windows (7)
import screeninfo import re import sys """ GetScreenInfo() cross platform creates a dictionary with an entry for each monitor tied to users computer. the key is constructed as follows: monitor{n} n is sequentiallty assigned beginning with 1 Usage: GetScreenInfo(win_scale=.6, offset_scale=.1) where: scale is % of full screen, so default .6 = 60 % and offset is % of scaled width & height each entry contains a nested dictionary with four values: swidth = scaled_width sheight = scaled height hoffset = horizontal offset voffset = vertical offset4 example: >>> from GetScreenInfo import GetScreenInfo >>> gsi = GetScreenInfo(win_scale=.8, offset_scale=.2) >>> print(gsi.monitor_info) >>> {'monitor1': {'swidth': 1920, 'sheight': 1080, 'hoffset': 384, 'voffset': 216}} {'monitor1': {'swidth': 1920, 'sheight': 1080, 'hoffset': 384, 'voffset': 216}} Tested on Windows 7 with python 3.6 Needs testing on Linux and Apple """ class GetScreenInfo(): def __init__(self, win_scale=.6, offset_scale=.1): # use scale of 0 to return unmodified dimensions if win_scale == 0: newscale = 1 newoffset = 0 else: newscale = win_scale newoffset = offset_scale platform = sys.platform platform = platform.rstrip('1234567890') self.monitor_info = {} ostypes = { 'linux': 'x11', 'win': 'windows', 'cygwin': 'cygwin', 'darwin': 'osx' } # Following hack is for return proper linux value from sys.platform # prior to python 3.3 which always starts with 'linux' but may # be linux1, linux2 etc. if platform.startswith('linux'): montype = ostypes['linux'] mon = screeninfo.get_monitors(ostypes[platform]) for n, item in enumerate(mon): m = re.split(r'[()x+]', str(item)) mkey = 'monitor{}'.format(n+1) self.monitor_info[mkey] = {} self.monitor_info[mkey]['swidth'] = int(float(m[1]) * newscale) self.monitor_info[mkey]['sheight'] = int(float(m[2]) * newscale) self.monitor_info[mkey]['hoffset'] = int(self.monitor_info[mkey]['swidth'] * newoffset) self.monitor_info[mkey]['voffset'] = int(self.monitor_info[mkey]['sheight'] * newoffset) def main(scale, offset): gsi = GetScreenInfo(win_scale=scale, offset_scale=offset) print(gsi.monitor_info) if __name__ == '__main__': main(scale=.8, offset=.2)It should return a dictionary with an entry for each monitor attached on the target computer
here's a single monitor output example:
Output:{'monitor1': {'swidth': 1536, 'sheight': 864, 'hoffset': 307, 'voffset': 172}}
the values are scaled by scale and offset with the fp number representating % of full scale