Python-TkInter应用程序中DPI/scaling factor的检测

2024-03-28 14:13:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望我的应用程序能够检测到它是否在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,而{}返回的是1016!(谢天谢地,我的笔记本电脑宽度不超过一米)。在

我假设TkInter在这里从一些内部检测到的DPI(错误地被检测为96)来计算宽度(mm),但我不确定它从何处得到这个值;我目前在Linux上,xrdb -query返回196的DPI,因此它没有从X服务器获取DPI。在

有没有人知道一种跨平台的方法来获得我的屏幕DPI,或者让TkInter能够正确地获得它?或者,更重要的是:我怎样才能让TkInter在HiDPI屏幕上玩得很好,也能在普通屏幕上正常工作呢?谢谢!在


Tags: toinmasterget屏幕tkinterrootwindow
1条回答
网友
1楼 · 发布于 2024-03-28 14:13:36

我使用的是TclTk,而不是TkInter,我知道如何做到这一点的唯一方法是从字体度量中计算出来。。。在

%font度量Tk_DefaultFont -上升30-下降8-行距38-固定0

行距大约是DPI的0.2倍(目前这里设置为192)

相关问题 更多 >