Python Forum

Full Version: Looking for platform test help
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
The following is corrected:
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])
       print(f'mon: {mon}')
       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(float(m[1]) * newoffset)
           self.monitor_info[mkey]['voffset'] = int(float(m[2]) * 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)
result:
Output:
mon: [monitor(1920x1080+0+0)] {'monitor1': {'swidth': 1536, 'sheight': 864, 'hoffset': 384, 'voffset': 216}}
This is exactly what I get:

[Image: wiwry7xQT6Ky4dQXPCFnhQ.png]

https://prnt.sc/fsjbqq

https://prnt.sc/fsjd85

Why the image is broken
(Jul-06-2017, 09:01 PM)wavic Wrote: [ -> ]Why the image is broken
it appears that prnt.sc isnt working with img tags?
[Image: wiwry7xQT6Ky4dQXPCFnhQ.png]

but yet imgur works
[Image: dgrCwVq.jpg]

not sure? Although you could always upload the image as an attachment which shows it in post.
Know you were asking for Linux and Mac, but I have Windows on right now Big Grin

Output:
Windows 10; Python 3.6; Single LCD Monitor mon: [monitor(1920x1080+0+0)] {'monitor1': {'swidth': 1536, 'sheight': 864, 'hoffset': 384, 'voffset': 216}} Process finished with exit code 0 ########## Switched screen size mon: [monitor(800x600+0+0)] {'monitor1': {'swidth': 640, 'sheight': 480, 'hoffset': 160, 'voffset': 120}} Process finished with exit code 0
Thanks all.
I think it's working ok now.
Pages: 1 2