【问题标题】:Python window sizing in Windows with non default display sizingWindows 中的 Python 窗口大小调整与非默认显示大小调整
【发布时间】:2016-12-11 04:39:51
【问题描述】:

我最近购买了一台 4K 笔记本电脑,但遇到了窗口大小问题。

我编写了一个 python 应用程序,它可以根据系统的分辨率调整窗口大小。它工作正常……除了在 4K 笔记本电脑上。

它在这里不起作用,因为由于 4K 分辨率,一切都太小了。因此,Windows 10 中的设置 > 显示 > “更改文本、应用程序和其他项目的大小:”下有一个功能,您可以在其中调整大小。这里推荐的值为 250%,而不是正常的 100%。

这意味着由于 4k 显示而开始时很大的窗口大小实际上比调整大小后的大小大 250%。

有没有办法编写一个python 脚本来解决Windows 问题?或者让 Python 应用程序不受此 Windows 功能的影响?

【问题讨论】:

  • 到目前为止我发现的唯一解决方案是查看分辨率是否为 3840x2160,如果是,请手动将其设置为适用于我的屏幕的较小比例。但这不适用于具有不同窗口放大率的其他人。

标签: python windows


【解决方案1】:

Windows 将缩放任何未声明为 DPI 感知的应用程序(无论是在清单中,还是在应用程序属性中)。

如果您使用的是 exe(嵌入式 python 实例或 pyinstaller 生成的),您可以右键单击该 exe,转到“兼容性”选项卡,然后选中“禁用 DPI 缩放”框。您还可以调整 exe 的清单(但是,这通常被编译到 exe 中,这使得在没有特殊工具的情况下更改它具有挑战性,尽管 pyinstaller 将其分开)。如果您可以访问清单,以下是有关如何更改清单的信息: https://blogs.msdn.microsoft.com/chuckw/2013/09/10/manifest-madness/

如果您使用的是未编译的 python 脚本,您可以使用 ctypes 调用 WIn32 SetProcessDPIAware 函数来执行此操作:

from ctypes import *
import [your gui framework]

[your code here]

if __name__ == '__main__':
  windll.shcore.SetProcessDpiAwareness(c_int(1))
  [rest of your code]

如果您使用的 python 解释器已经在解释器的清单中声明了 DPI 感知,则该调用可能会引发访问被拒绝 (0x80070005) 的 HRESULT。详情请见https://msdn.microsoft.com/en-us/library/windows/desktop/dn302122(v=vs.85).aspx

您可能需要查看 MSDN 上的这些文章,了解有关创建 DPI 感知应用程序(以及如何告知 Windows)的更多信息:

https://msdn.microsoft.com/en-us/library/ms701681(v=vs.85).aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/dn469266(v=vs.85).aspx

【讨论】:

    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2011-08-18
    • 2012-08-02
    • 2016-09-14
    相关资源
    最近更新 更多