我希望我的应用程序能够检测是否在HiDPI屏幕上运行,如果是,则缩放自身以便可用。如此问题中所述,我知道需要设置缩放因子,而该因子应为我的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中计算出毫米宽度,将其错误地检测为96,但我不确定它从哪里获取这个值;我目前在Linux上,xrdb -query
返回196 DPI,因此它没有从X服务器获取DPI。
是否有人知道跨平台获取屏幕DPI的方法,或者让TkInter能够正确获取它的方法?或者更重要的是:如何使TkInter在HiDPI屏幕上正常工作并在普通屏幕上表现良好?谢谢!