Windows中的Python窗口大小调整,具有非默认显示大小

时间:2016-12-11 04:39:51

标签: python windows

我最近购买了一台4K笔记本电脑,并且遇到了窗户尺寸问题。

我编写了一个python应用程序,它根据系统的分辨率调整窗口大小。它工作得很好......除了4K笔记本电脑。

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

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

有没有办法编写一个python脚本来解决Windows?或者从这个Windows功能中免除Python应用程序?

1 个答案:

答案 0 :(得分:0)

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-awareness,那么调用可能会抛出拒绝访问的HRESULT(0x80070005)。有关详细信息,请参阅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