Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question - How can I adjust the GUI based on Windows scale and resolution? #6016

Open
7 tasks done
DimaTepliakov opened this issue Nov 7, 2022 · 3 comments
Open
7 tasks done

Comments

@DimaTepliakov
Copy link

Type of Issue (Enhancement, Error, Bug, Question)

Question


Operating System

Windows (11)

PySimpleGUI Port (tkinter, Qt, Wx, Web)

tkinter


Versions

Python version: 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)]
port: tkinter
tkinter version: 8.6.12
PySimpleGUI version: 4.60.1


Your Experience In Months or Years (optional)

Years Python programming experience
2 Years
Years Programming experience overall
3 Years
Have used another Python GUI Framework? (tkinter, Qt, etc) (yes/no is fine)
No
Anything else you think would be helpful?


Troubleshooting

These items may solve your problem. Please check those you've done by changing - [ ] to - [X]

  • Searched main docs for your problem www.PySimpleGUI.org
  • Looked for Demo Programs that are similar to your goal. It is recommend you use the Demo Browser! Demos.PySimpleGUI.org
  • If not tkinter - looked for Demo Programs for specific port
  • For non tkinter - Looked at readme for your specific port if not PySimpleGUI (Qt, WX, Remi)
  • Run your program outside of your debugger (from a command line)
  • Searched through Issues (open and closed) to see if already reported Issues.PySimpleGUI.org
  • Have upgraded to the latest release of PySimpleGUI on PyPI (lastest official version)
  • Tried using the PySimpleGUI.py file on GitHub. Your problem may have already been fixed but not released

Detailed Description

I created a GUI using PySimpleGUI which includes 2 windows, I work on a computer with a resolution of 1920x1080 when the scale is set to 100% and you can see the application well. Screenshot:
good res

But when the scale is set to 150% I get this:
windows_scale_150%

I found the following calculation designed to solve the problem of the scale between the computer on which the GUI is developed and the computer on which the GUI actually runs

    my_scaling = 1.3333333333333333
    my_width, my_height = 1920, 1080
    
    root = sg.tk.Tk()
    new_scaling = root.winfo_fpixels('1i')/72
    root.destroy()

    width, height = sg.Window.get_screen_size()

    scaling = new_scaling * min(width / my_width, height / my_height)
    sg.set_options(scaling=scaling)

When I run my code in the code plugin mentioned above, this is what I get:

windows_scale_150%_with_scale_calculation
As you can see, part of the window is not displayed properly and the resolution is compromised.

Is there a way to adjust the display of the GUI on the user's computer in such a way that it will be adjusted according to the resolution\SCALE defined on the screen on which the application ran without harming some of the widgets that appear in the GUI?

Code To Duplicate

# I tried to shorten the code as much as possible while maintaining a structure similar to what I use
import PySimpleGUI as sg

helvetica        = lambda font_size: ('Helvetica', font_size)
helvetica_bold   = lambda font_size: ('Helvetica', font_size, 'bold')
helvetica_italic = lambda font_size: ('Helvetica', font_size, 'italic')
light_grey = '#ebedeb'
blue = 'DodgerBlue2'
button_color = ('white', 'white')

sg.theme('Gray Gray Gray')
sg.theme_background_color('white')
sg.theme_element_background_color('white')
sg.theme_text_element_background_color('white')
sg.theme_input_background_color(light_grey)

vad_off_light = b'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'
big_blue_rectangle_btn = b'iVBORw0KGgoAAAANSUhEUgAAALYAAAA6CAMAAAAqXFOVAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHpUExURQAAAAAAAP///wAAAP///4CAv////wAAAP///////wAAJJK22////////wAAAFVxjrPM5kBVgP///+vr/////9vt/6rM3f///wAAAM/f7+///wAAAAAAD1p4pfH//wAAAOTy//L//wAAACYzTUBZgAAAABQUHwAAAAAAAAkJCRISEgkJEQgxhAAAAAgICBAwjwAAAAAAAAAAAAcHBwcukA0zhgAAAAAAAAAAAAAAAAkxjwsvkQswkQsxjgowjwowjwowjwo0lAs0lA6S8A+Y8hJWyRJYyhJg0xKN7RKP7hKg9hKk9xKs+hKu+hNWyhNYyxNazBNazRNbzxNd0BNg1BOg8BOk9xOl9xOn9xRd0hRf0xRg1BRi1RRk1xSn8hSn9xSp8hSp+BSq+BSs+RVm2BVn2RWu+RZp2xZr3BZt3RZu3xZu4BZw4hav+hax+hay+ha0+xdy4hd04xd35Re1/Be4/Bh55Rh55xh76Bh96Ri6/Bi6/Ri7/Rl/6hmA6xm9/RqE7BqG7BqI7RqJ7hq+/hrA/hrB/hrB/xuL7xuN8BuP8BuP8RuR8RuS8hvC/xvE/xvF/xvG/xvL/xvM/xyS8hyU8xyW8xyY8xzG/xzH/xzJ/x2W9B2Y9B2Z9B2f9h2g9h29/R3J/x3K/2nfTzgAAABAdFJOUwABAQIDBAQFBQYHBwcICQkKDAwNDQ4PDxAQEBERERITExMUFBQZGRobHBweHyAgICImJycnKCwtLzCIiZCR7e5rkRDpAAAACXBIWXMAAAsSAAALEgHS3X78AAACWklEQVRoQ9XaV1cTURSG4Z2ZMMPBZASMEBhADB0MIhJFJSEgggpoVCRYaYqVooIFUCwUK1WlKEV+qWeSeLH9BfM9N2fNuXrXWbPvNsWklB2pPQGg9mhZSrxYUiqPV5X4TK/tmQdKqo5VKonqar9p6Gr8w95U3TD91bFupaLUgGiOU43SCqt7r99wUCAYCgOoDwbIYfj3yMcuNlWqaexZ2f1je7srPY2HSDWLFXKWG0R1t3e2N3/b3ub2ztWTREa5k7QinSi0vPULwtZyiEgv0kj45DyGN1Z/QljdCMup9AkSphzL8PoPEOsym0xBLq+VvfYdxJqV7XUlspe+gVhi2YtfQSyy7IUvIBZ49mcQ/2V/AsGz5z+CmGfZcx9AzLHs2fcgZln2zDsQMyx7+i2IaZY99QbEFM9+DYJnT74CMcmyJ16CmODZL0Dw7PHnIMZZ9tgzEGMse/QpiFGe/QQEzx55DGKEZQ8/AjHMsx+C4NlDD0AM8ez7IHj24D0Qgyx74C6IAZ59BwTP7r8Fop9l990E0ceye2+A6OXZ10Hw7O5rILpZdtcVEF0sO3oZRJRld14C0cmzIyB4djRyEULk308icuQZau+4AKGjPSRzcwSJApWorulsS/MZ22tuOXf6FJFaIEgr1IlqGpraWs/bXmtbU8NhIr1QI+d+Qz57IFif2H2wNWsxg8jY5yTFnQu0BGNRc90KkeZJcyQuIDjSPJo8FJGZgbR0lJEp4stSwpOflZoUu7S5pNSsfE+8WnZr7vTsvIMA8rLT3VqiWlKcyUK4bE+IZKcVTfQXfmJz85CV5DIAAAAASUVORK5CYII='
toggle_btn_off = b'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'
no_asr_img = b'iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKIUExURQAAAAD//////4CAgKqqqv///8zMzKqqqqrV1dXV1b+/v8bGxszMzMTExNjY2My7u7+/v8PDw9LDw8bGxsnJyczMzMLCws7OzsjIyL+/v8zMzMTExMXFxc7Ozs/Hx8/Pz8HBwcnJycvLy8vLy8bGxszGxsjIyM7OzsrKysvLy8LIyMjIyMnJycfHx8jIyM3IyMTExMXFxcrFxcrKysbGxsjIyMnJycrKysfHx8jIyMnJycbGxsvHx8jIyMzMzMrKysfHx8PDw8vLy8nJycrHx8vIyMfHx8jIyMnGxsjIyMnJyc3KysnGxsvJycfHx8nGxsnJycnHx8nHx8nHx8rKysrIyMnJycvJycjGxsrIyMfHx8jHx8rIyMzKysnHx8vJycnHx8jIyMvLy8vJycrKysrKysjHx8nHx8vHx83Ly8rIyMrIyMnHx8rJycnHx8nIyMrIyMjHx8nHx8jIyMjIyMnHx8jIyMrIyMjIyMjIyMvKysrJycnIyMnIyMnIyMjIyMvLy8rIyMnHx8nJycnJycvKysrJycnIyMrKysnIyMnGxsrJycjIyMrIyMrJycnJycnIyMnJycjHx8jIyMnIyM7NzcnIyMnIyMrJycjIyMnHx8nIyMrJycvLy8jHx8nJycrJycnIyMrJycnIyMrJycnHx8rJycjIyMnIyMnIyMvJycnIyMrJycrJycnIyMnIyMjIyMrJycrJycnIyM7NzcnJycrJyc3Ly8nIyMnIyMvKys3MzMjHx8nIyMnJycvKysnIyMzLy83MzMrJycnIyMrJycvKyszKyszLy83MzM7Nzc/OztDPz9DQ0NHQ0NLQ0NLR0dPS0tTT09XU1NbU1NfW1tjX19nY2BruFP8AAADEdFJOUwABAQIDAwUGBgYICQoNDQ8QERESExQVFRcYGRofHyAgISEiJygoKiorLC4uLzIzMzQ1NTU2ODk+QEFCQ0RFRkhJTU9RUlNXXV5hY2VnZ2lsbXJ2d3h5e3+CgoODg4OEhIWGiImLlJWWl5iZmpubnJ2en6ChoqWoqKqrrK60tbi5uru8vL2/wcLGx8rKzM3P1NXV1tbW1tnb3d/h4+Pj5Obm5+fo6Onp7Ozt7u/v8PHy8/T29/f4+fn6+/v7/Pz8/P39/f6Mp/+RAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB4klEQVQoU2OAACENbWlmKBsFWNVu3NHrBeUgA8O5F44dPb3NE8pFArEXjwDBmU4eKB8O2PJOg2ROTZSFCsABWz5EZoIcVAAO2ApPEZCZpAgVgAOozOmpClABOGArAMkcPZHMxmAUVlSe4SMNFrZMN2MBueDo8QQG6fyVB89dOLNjViAnUGbKhRrBHKDM6VI2pa7rVy9funTp8rXzBQIMDAtOtYgAZU4uMmVt2F8cEROfGBcZ3XYqiplh9ql23uCLR88UMnifm67MIMrFwC/O4Hp6rS5D98nFIvI9l7Z4MPRdmKIUeiSFb/IOC8sTp5MYws+cDGbQLGlSUV92anVA4+Vc4SUXUrOOHetmUJ1xer0vO4Mkg8O6Y8cOnziXLbTw6KnTR47OY2BwXn5xe52nGoP1mmNHjh4Bysw/CvLddKC77Xp2Xz6z2Fh0zgmgyLkc4cUgmZPVIM+K+ZXN3OPPUHESKHIlU3AVKEROuYNkgOHjdqKSSW/TsaM7U2WY7ZtPHznTIQkSZ5YQddq7zoYh6NCpA2nmtvb1Z86ssAfrsFy6YeuR061ibCFrLpw+efLkmXP9LmAJBsd9Z8+cPn2pSpjRImvarrObuyNVIBIMHFp6QGBgwg20UEZHX1OKhYGBgQEAS+LYV14exJsAAAAASUVORK5CYII='
settings_btn = b'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'


# =============================================================================
# Commands Column
# =============================================================================
def speaker_commands_column(source_number:int) -> sg.Col:
    commands_pane = [[sg.T('Could not load commands', size=(28,1), pad=(10), font=helvetica(22), justification='l', key=f'command_{cmd+1}_speaker_{source_number}')] for cmd in range(4)]    
    return sg.Col(commands_pane, element_justification='c', key=f'commands_column_{source_number}')

# =============================================================================
# Biometrics AI GUI
# =============================================================================
def run_gui():

    bio_calib_col = [
        [sg.T('Biometrics\nCalibration', size=(15,2), font=helvetica_bold(17), text_color=blue, justification='c')],
        [sg.T('Names:', size=(8,1), font=helvetica(15), justification='c')],
        [sg.Col([
            [sg.InputText(default_text='', size=(10,1), font=helvetica(16), enable_events=True, key=f'bio_source_name_1'),
             sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'bio_calibrate_source_1')],       
            [sg.HSeparator(pad=10, color=light_grey)],
            #
            [sg.InputText(default_text='', size=(10,1), font=helvetica(16), enable_events=True, key=f'bio_source_name_2'),
             sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'bio_calibrate_source_2')],       
            [sg.HSeparator(pad=10, color=light_grey)],
            #
            [sg.InputText(default_text='', size=(10,1), font=helvetica(16), enable_events=True, key=f'bio_source_name_3'),
             sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'bio_calibrate_source_3')],       
            [sg.HSeparator(pad=10, color=light_grey)],
            #
            [sg.InputText(default_text='', size=(10,1), font=helvetica(16), enable_events=True, key=f'bio_source_name_4'),
             sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'bio_calibrate_source_4')],       
            [sg.T('Select source to calibrate', font=helvetica_italic(12), text_color='grey', key='bio_calibration_text', justification='c')],
            ], element_justification='c')],
            [sg.Text(font='_ 200', expand_y=True)], 
            [sg.Text(size=(19,1)), sg.Image(no_asr_img, background_color=sg.theme_background_color(), key=f'asr_indicator', pad=((9,0), (0,20)))],
            [sg.Text(size=(19,1)), sg.B(image_data=settings_btn, button_color=button_color, border_width=0, key='configuration_gui')]
    ]

    test_left_column = [
        [sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'krdm_calibrate_source_1'), 
         sg.T('Name', size=(18,1), justification='c', font=helvetica_bold(24), text_color=light_grey, key=f'detected_bio_source_1'), 
         sg.Image(vad_off_light, background_color=sg.theme_background_color(), key=f'vad_detection_1')],
        [speaker_commands_column(1)],
        [sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'krdm_calibrate_source_3'), 
         sg.T('Name', size=(18,1), justification='c', font=helvetica_bold(24), text_color=light_grey, key=f'detected_bio_source_3'), 
         sg.Image(vad_off_light, background_color=sg.theme_background_color(), key=f'vad_detection_3')],
        [speaker_commands_column(3)],
    ]

    test_right_column = [
        [sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'krdm_calibrate_source_2'), 
         sg.T('Name', size=(18,1), justification='c', font=helvetica_bold(24), text_color=light_grey, key=f'detected_bio_source_2'), 
         sg.Image(vad_off_light, background_color=sg.theme_background_color(), key=f'vad_detection_2')],
        [speaker_commands_column(2)],
        [sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'krdm_calibrate_source_4'), 
         sg.T('Name', size=(18,1), justification='c', font=helvetica_bold(24), text_color=light_grey, key=f'detected_bio_source_4'), 
         sg.Image(vad_off_light, background_color=sg.theme_background_color(), key=f'vad_detection_4')],
        [speaker_commands_column(4)],
    ]

    test_columns = [
        [sg.T('Calibrate Ambient Noise', font=helvetica(12))],
        [sg.B(image_data=toggle_btn_off, button_color=button_color, border_width=0, key=f'krdm_calibrate_source_5')],
        [sg.Col(test_left_column), sg.Col(test_right_column)],
        [sg.B('Listen', image_data=big_blue_rectangle_btn, button_color=button_color, border_width=0, size=(20, 2), font=helvetica(16), key='start_stop_recording')],
        [sg.StatusBar('', size=(60,1), key='status_bar', font=helvetica(12), justification='c')]
    ]

    merged_layout = [[sg.Col([[sg.Col(test_columns, element_justification='c'), sg.VSeparator(pad=5, color=light_grey), sg.Col(bio_calib_col, vertical_alignment='top')]])]]
   
    window = sg.Window('Example', 
                       merged_layout, 
                       finalize=True, 
                       modal=True,
                       resizable=False,
                       titlebar_background_color='white',
                       grab_anywhere=True, 
                       enable_close_attempted_event=True, 
                       element_justification='c',
                       right_click_menu_selected_colors=('white', blue))

    for win in range(1,5):
        window[f'commands_column_{win}'].Widget.configure(borderwidth=1, relief=sg.DEFAULT_FRAME_RELIEF)

    while True:
        event, values = window.read(timeout=10)
        if event == sg.WINDOW_CLOSE_ATTEMPTED_EVENT:
                break

# =============================================================================
# Starting Point...
# =============================================================================
if __name__ == '__main__':
    run_gui()

Screenshot, Sketch, or Drawing

Example with 100% scale:

example_100%_scale

Example with 150% scale:

example_150%_scale


Watcha Makin?

A Monitor that controls our DSP.

@pysimpleissue pysimpleissue bot closed this as completed Nov 7, 2022
@pysimpleissue pysimpleissue bot added Fill issue form or you will be REJECTED You MUST use the supplied template to submit a request. PySimpleGUI Issues Bot Has Detected an Error labels Nov 7, 2022
@DimaTepliakov DimaTepliakov changed the title [ Enhancement/Bug/Question] NOTE - you can also call sg.main() or sg.main_open_github_issue() to post an issue Question - How can I adjust the GUI based on Windows scale and resolution? Nov 7, 2022
@pysimpleissue pysimpleissue bot removed Fill issue form or you will be REJECTED You MUST use the supplied template to submit a request. PySimpleGUI Issues Bot Has Detected an Error labels Nov 7, 2022
@pysimpleissue pysimpleissue bot reopened this Nov 7, 2022
Repository owner deleted a comment from pysimpleissue bot Nov 7, 2022
@PySimpleGUI
Copy link
Owner

I'm unsure of the underlying scaling, dithering, etc, algorithms that tkinter uses. It may be worth investigating to see what other users have said about their experiences using this feature. I've personally not used any of the scaling features.

Were the elements cut off due to simply running out of screen space (i.e. not enough vertical pixels)? I think this is what you're referring to with "part of the window is not displayed correctly".

@PySimpleGUI
Copy link
Owner

To answer your question a little more directly...

Is there a way to adjust the display of the GUI on the user's computer in such a way that it will be adjusted according to the resolution\SCALE defined on the screen on which the application ran without harming some of the widgets that appear in the GUI?

Because the GUI is using raster, not vector, graphics, you are going to get some loss of quality when you scale up. It's just like enlarging an image. The process will create a loss of quality.

As a developer, I think I would take the approach of developing code to run on the target machine specifically so that it has the best user experience. In other words, don't scale up. Write the code so that at 100% it will look right on the target platform.

@PySimpleGUI
Copy link
Owner

Side note... I really like the customizations you've done in your GUI!
image

The Toggles buttons, settings button, and light image are nicely done. It's nice to see the attention to detail and polish.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants