微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不同的PPI和屏幕分辨率上扩展我的Tkinter程序

如何解决如何在不同的PPI和屏幕分辨率上扩展我的Tkinter程序

我一直在为某人开发一个应用程序,我们很快意识到该应用程序在笔记本电脑之间看起来有所不同(在平板电脑上,由于ppi而无法使用)。我查找了问题所在,因此使用starting_frame.tk.call('tk','scaling',factor)来标准化所有设备上的PPI。但是我很快意识到,该程序仍然取决于屏幕大小(我的分辨率设置为root.geometry("1280x960") 。为了解决所有这些问题,我创建了以下代码

root = tk.Tk()
dpi = root.winfo_fpixels('1i')
factor = dpi / 72

width = root.winfo_screenwidth()
height = root.winfo_screenheight()


ratio_1 = width * height
ratio_2 = 1
r2_width = 4
r2_height = 3

while (ratio_1 / ratio_2) != 1.6875:
   r2_height = r2_width / 1.33333333333
   ratio_2 = r2_width * r2_height
   r2_width = r2_width + 1

   if (ratio_1/ratio_2) <= 1.6875:
       break
   if width + 1 == r2_width:
       break

root.geometry(str(r2_width) + "x"+ str(int(r2_height)))

starting_frame = tk.Canvas(root)

factor_multiplier = (.40*factor) +.46
factor = factor/factor_multiplier

starting_frame.tk.call('tk',factor)
starting_frame.place(height=int(r2_height),width = r2_width)

让我解释一下:

dpi = root.winfo_fpixels('1i')
factor = dpi / 72

width = root.winfo_screenwidth()
height = root.winfo_screenheight()

这只是获取设备的ppi和屏幕分辨率...。

ratio_1 = width * height
ratio_2 = 1
r2_width = 4
r2_height = 3

while (ratio_1 / ratio_2) != 1.6875:
    r2_height = r2_width / 1.33333333333
    ratio_2 = r2_width * r2_height
    r2_width = r2_width + 1

    if (ratio_1/ratio_2) <= 1.6875:
        break
    if width + 1 == r2_width:
        break

root.geometry(str(r2_width) + "x"+ str(int(r2_height)))

这基本上会显示我的16x9显示屏,并找到4:3的分辨率,即屏幕分辨率的88%左右(我只是认为它的大小合适,并且我的程序基于此)。

factor_multiplier = (.40*factor) +.46
factor = factor/factor_multiplier

这将转换任何屏幕的ppi,以便在显示之间标准化文本和填充的大小(我假设是线性关系)。

starting_frame.tk.call('tk',width = r2_width)

这只是根据我计算出的新ppi和res制作框架和内容

虽然这种排序有效,然后我所有的硬编码文本位置都乘以我的factor_multiplier ,但这是一个很漫长而漫长的过程。请告诉我有一种更好的方法,因为我一直在寻找,找不到适合自己需求的东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。