Python Forum
Looking for platform test help
Thread Rating:
  • 1 Vote(s) - 2 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Looking for platform test help
#1
Please, if willing, try this snippet on Linux and OS-X
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
Reply


Messages In This Thread
Looking for platform test help - by Larz60+ - Jul-06-2017, 03:16 PM
RE: Looking for platform test help - by buran - Jul-06-2017, 03:45 PM
RE: Looking for platform test help - by metulburr - Jul-06-2017, 06:18 PM
RE: Looking for platform test help - by Larz60+ - Jul-06-2017, 06:47 PM
RE: Looking for platform test help - by Larz60+ - Jul-06-2017, 07:20 PM
RE: Looking for platform test help - by wavic - Jul-06-2017, 07:37 PM
RE: Looking for platform test help - by sparkz_alot - Jul-06-2017, 08:32 PM
RE: Looking for platform test help - by Larz60+ - Jul-06-2017, 08:36 PM
RE: Looking for platform test help - by wavic - Jul-06-2017, 08:37 PM
RE: Looking for platform test help - by Larz60+ - Jul-06-2017, 08:44 PM
RE: Looking for platform test help - by Larz60+ - Jul-06-2017, 08:48 PM
RE: Looking for platform test help - by wavic - Jul-06-2017, 09:01 PM
RE: Looking for platform test help - by metulburr - Jul-06-2017, 09:38 PM
RE: Looking for platform test help - by sparkz_alot - Jul-06-2017, 09:44 PM
RE: Looking for platform test help - by Larz60+ - Jul-06-2017, 11:50 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020