4.15.2 2020 年 1 月 15 日发布
了解这一点至关重要。 了解 PySimpleGUI.py 文件所在的位置同样重要。 您可以通过将其添加到文件顶部并运行它来获得这些:
import PySimpleGUI as sg
print(sg)
print(sg.version)
____2y_____ Python 编程经验
_________ 总体编程经验
____是_____ 以前使用过另一个 Python GUI 框架(tkinter、Qt 等)(是/否很好)?
我使用程序https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Save_Window_As_Image.py的代码将我的图像保存为 PNG 文件。 这工作正常。
在我将屏幕分辨率从 1360x768 增加到 1920x1080 以保存更大的图像后,问题出现了。 仅保存了部分图像。 演示程序出现同样的问题:
原始屏幕分辨率 1360x768:
分辨率低于原始分辨率似乎可行
我的问题是:我必须重新安装 python 的哪一部分才能使脚本再次工作?
否则我对 PySimpleGUI 非常满意,请参阅https://meteorspectroscopy.org/2020/03/27/meteor-spectra-analysis-new-version/以了解我基于它的脚本的描述
Demo_Save_Window_As_Image.py 见上
演示程序提供 2 个功能。 它们提供了如何使用特定 PySimpleGUI 特性或功能的设计模式/示例。 他们做的另一件事是演示将您的应用程序与其他包或库集成的方法。 它们并不意味着是成熟的应用程序,而是隐含的演示。 我不是 PIL 专家,所以我不知道如何建议您使用 PIL 包最好地解决您的问题。
流星光谱分析程序令人印象深刻!
有时我也有显示分辨率的问题。 它不是由 PySimpleGUI 引起的,而是由 tkinter 引起的。
tkinter 中的函数 TkWinDisplayChanged 使用 Windows API 调用 GetDeviceCaps 以参数 HORZRES 和 VERTRES 获取屏幕宽度和高度。
在GetDeviceCaps 中,有注意事项:
GetDeviceCaps 报告显示驱动程序提供的信息。 如果显示驱动程序拒绝报告任何信息,GetDeviceCaps 将根据固定计算计算信息。 如果显示驱动程序报告无效信息,GetDeviceCaps 将返回无效信息。 此外,如果显示驱动程序拒绝报告信息,GetDeviceCaps 可能会计算出不正确的信息,因为它假定固定 DPI (96 DPI) 或固定大小(取决于显示驱动程序提供和未提供的信息)。 不幸的是,为 Windows 显示驱动程序模型 (WDDM)(在 Windows Vista 中引入)实现的显示驱动程序导致 GDI 无法获取信息,因此 GetDeviceCaps 必须始终计算信息。
这意味着结果不受信任,所以大多数情况下,我在使用 tkinter 之前将其添加到我的脚本中,并且大部分时间它都可以正常工作。 python 或 tkinter 运行时不要切换分辨率,一些值将被存储并保持不变。
import ctypes
ctypes.windll.user32.SetProcessDPIAware() # Set unit of GUI to pixels
或许你可以试试。
@杰森,
非常感谢您的建议。 我将这两行添加到我的代码中,它适用于所有分辨率。
这就是我喜欢 PySimpleGUI 的地方:我总能找到解决问题的方法。 反应也非常快。 伟大的!
马丁
这就是@jason990420 !!! 哇谢谢你!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
最有用的评论
@杰森,
非常感谢您的建议。 我将这两行添加到我的代码中,它适用于所有分辨率。
这就是我喜欢 PySimpleGUI 的地方:我总能找到解决问题的方法。 反应也非常快。 伟大的!
马丁