Pysimplegui: [Error] Guardar imagen no funciona correctamente después de cambiar la resolución de la pantalla

Creado en 3 jun. 2020  ·  4Comentarios  ·  Fuente: PySimpleGUI/PySimpleGUI

Tipo de problemas (error, pregunta)

Windows 10 1909

Python 3.7.4

PySimpleGUI 4.15.2


4.15.2 Lanzado el 15 de enero de 2020

Es fundamental saberlo. Saber dónde se encuentra su archivo PySimpleGUI.py es igualmente importante. Puede obtenerlos agregando esto al principio de su archivo y ejecutándolo:

import PySimpleGUI as sg
print(sg)
print(sg.version)

Sus niveles de experiencia en meses o años

____2y_____ Experiencia en programación Python
_________ Experiencia de programación en general
____sí_____ ¿Ha usado otro marco de interfaz gráfica de usuario de Python (tkinter, Qt, etc.) anteriormente (sí / no está bien)?

Ha completado estos pasos:

  • [x] Lea las instrucciones sobre cómo presentar un problema.
  • [x] Buscó su problema en los documentos principales http://www.PySimpleGUI.org .
  • [] Buscó en el archivo Léame su puerto específico si no es PySimpleGUI (Qt, WX, Remi)
  • [x] Buscó programas de demostración que sean similares a su objetivo http://www.PySimpleGUI.com
  • [] Tenga en cuenta que también hay programas de demostración en cada puerto de GitHub
  • [] Ejecute su programa fuera de su depurador (desde una línea de comando)
  • [x] Buscó a través de problemas (abiertos y cerrados) para ver si ya se informaron

Descripción del problema / pregunta / detalles

Usé el código del programa https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Save_Window_As_Image.py para guardar mis imágenes como archivos PNG. Esto funciona bien.
El problema ocurre después de que aumenté la resolución de pantalla de 1360x768 a 1920x1080 para guardar imágenes más grandes. Solo se guardó una parte de la imagen. El mismo problema ocurre con el programa de demostración:
grafik
resolución de pantalla original 1360x768:
grafik
Ir a una resolución más baja que la original parece funcionar
Mi pregunta es: ¿qué parte de Python tengo que reinstalar para que el script vuelva a funcionar?

De lo contrario, estoy muy satisfecho con PySimpleGUI, consulte https://meteorspectroscopy.org/2020/03/27/meteor-spectra-analysis-new-version/ para obtener una descripción de mi script basado en él.

Código para duplicar

Demo_Save_Window_As_Image.py ver arriba

Demo Programs

Comentario más útil

@Jason ,

Muchas gracias por tu consejo. Agregué las dos líneas a mi código y funciona para todas las resoluciones.

Eso es lo que me gusta de PySimpleGUI: siempre obtengo soluciones a mis problemas. También respuesta muy rápida. ¡Excelente!

Martín
grafik

Todos 4 comentarios

Los programas de demostración ofrecen 2 funciones. Proporcionan patrones de diseño / ejemplos de cómo usar características o funciones específicas de PySimpleGUI. La otra cosa que hacen es demostrar formas de integrar su aplicación con otros paquetes o bibliotecas. No están destinadas a ser aplicaciones completas, sino demostraciones implícitas. No soy un experto en PIL, por lo que no sé cómo aconsejarle sobre cómo resolver mejor su problema utilizando el paquete PIL.

¡El programa Meteor Spectra Analysis es bastante impresionante!

A veces también tengo problemas con la resolución de la pantalla. No es causado por PySimpleGUI, sino tkinter.

La función TkWinDisplayChanged en tkinter usa la llamada a la API de Windows GetDeviceCaps para obtener el ancho y alto de la pantalla con los parámetros HORZRES y VERTRES.

En GetDeviceCaps , hay una nota:

GetDeviceCaps informa la información que proporciona el controlador de pantalla. Si el controlador de pantalla se niega a informar cualquier información, GetDeviceCaps calcula la información basándose en cálculos fijos. Si el controlador de pantalla informa información no válida, GetDeviceCaps devuelve la información no válida. Además, si el controlador de pantalla se niega a informar información, GetDeviceCaps podría calcular información incorrecta porque asume DPI fijo (96 DPI) o un tamaño fijo (dependiendo de la información que el controlador de pantalla proporcionó y no proporcionó). Desafortunadamente, un controlador de pantalla que se implementa en el Modelo de controlador de pantalla de Windows (WDDM) (introducido en Windows Vista) hace que GDI no obtenga la información, por lo que GetDeviceCaps siempre debe calcular la información.

Significa que el resultado no es confiable, por lo que la mayoría de las veces, agrego esto a mi script antes de donde se usaba tkinter, y la mayoría de las veces funciona bien. Para no cambiar la resolución cuando python o tkinter se ejecutan, algunos valores se almacenarán y se mantendrán sin cambios.

import ctypes
ctypes.windll.user32.SetProcessDPIAware()   # Set unit of GUI to pixels

Quizás puedas probarlo.

@Jason ,

Muchas gracias por tu consejo. Agregué las dos líneas a mi código y funciona para todas las resoluciones.

Eso es lo que me gusta de PySimpleGUI: siempre obtengo soluciones a mis problemas. También respuesta muy rápida. ¡Excelente!

Martín
grafik

Este es todo @ jason990420 !!! ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Wow gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

¿Fue útil esta página
0 / 5 - 0 calificaciones