【发布时间】:2017-08-15 04:00:39
【问题描述】:
我希望我的应用程序能够检测它是否在 HiDPI 屏幕上运行,如果是,则将其自身放大以便可用。正如this question 中所说,我知道我需要设置一个缩放因子,这个因子应该是我的 DPI 除以 72;我的麻烦在于获取我的 DPI。这是我所拥有的:
def get_dpi(window):
MM_TO_IN = 1/25.4
pxw = window.master.winfo_screenwidth()
inw = window.master.winfo_screenmmwidth() * MM_TO_IN
return pxw/inw
root = Tk()
root.tk.call('tk', 'scaling', get_dpi(root)/72)
这不起作用(在我的 4k 笔记本电脑屏幕上测试)。经过进一步检查,我意识到get_dpi() 正在返回 96.0,而 winfo_screenmmwidth() 正在返回 1016! (谢天谢地,我的笔记本电脑不超过一米宽)。
我假设 TkInter 在这里从一些内部检测到的 DPI 计算宽度(以 mm 为单位),错误地检测为 96,但我不确定它从哪里得到这个;我目前在 Linux 上,xrdb -query 返回的 DPI 为 196,所以它没有从 X 服务器获取 DPI。
有没有人知道一种跨平台的方式来获取我的屏幕 DPI,或者让 TkInter 能够正确获取它?或者,更重要的是:我怎样才能让 TkInter 在 HiDPI 屏幕上玩得很好,并且在普通屏幕上也能正常工作?谢谢!
【问题讨论】:
-
您找到问题的答案了吗?我面临同样的问题,如果你能发布你是如何工作的,这将对我有所帮助。