什么是 tkinter 中的“屏幕单位”?

her*_*ity 4 python user-interface tkinter

我正在阅读下面链接中的回复并遇到“屏幕单位”,但我无法在吉姆丹尼的回复中找到“屏幕单位”究竟指的是什么。我知道它们不是像素。

如何使用 Tkinter 创建填充窗口宽度的换行文本?

Bry*_*ley 6

这在tkinter python 文档中非常简要地提到,尽管它没有使用短语“屏幕单位”:

距离 屏幕距离可以用像素或绝对距离指定。像素以数字形式给出,绝对距离以字符串形式给出,尾随字符表示单位:c 表示厘米,i 表示英寸,m 表示毫米,p 表示打印机点。例如,3.5 英寸表示为“3.5i”。

tcl/tk 文档中提到了“屏幕单元”。Tkinter 基于嵌入式 tcl/tk 解释器。因此,tcl/tk 文档包含定义定义。

在某些文档中,您会发现如下内容:

RootX 和 rootY 以屏幕单位指定(即 Tk_GetPixels 可接受的任何形式)

因此,“屏幕单位”是Tk_GetPixels. 该Tk_GetPixels手册页这样说:

这些过程将屏幕上的距离规范(objPtr 或字符串)作为参数,并以整数像素或浮点毫米数计算相应的距离。在任一情况下,objPtr 或 string 将屏幕距离指定为浮点数,后跟以下指示单位的字符之一:

<none>数字以像素为单位指定距离。

c该数字以厘米为单位指定屏幕上的距离。

i该数字指定屏幕上的距离(以英寸为单位)。

m该数字以毫米为单位指定屏幕上的距离。

p该数字指定屏幕上以打印机点数(1/72 英寸)为单位的距离。

因此,在任何可以指定“屏幕距离”的地方,您都可以使用"42"(42 像素)、"42c"(42 厘米)、"42i"(42 英寸)、"42m"(42 毫米)或"42p"(42 个打印机点)。

请注意,要将这些值转换为实际像素值,tk 将使用缩放因子,该因子由操作系统自动设置(有时不正确!)或通过调用tk scaling. 该TK缩放文档这样说:

tk scaling设置和查询 Tk 用于在物理单位(例如,点、英寸或毫米)和像素之间转换的当前比例因子。number 参数是一个浮点数,用于指定窗口显示上每个点的像素数。如果省略 window 参数,则默认为主窗口。如果省略 number 参数,则返回缩放因子的当前值。

“点”是等于 1/72 英寸的测量单位。缩放因子 1.0 对应于每点 1 个像素,相当于标准的 72 dpi 显示器。1.25 的缩放因子意味着每点 1.25 像素,这是 90 dpi 显示器的设置;在 72 dpi 显示器上将缩放因子设置为 1.25 会导致应用程序中的所有内容显示为正常大小的 1.25 倍。缩放因子的初始值在应用程序启动时根据已安装监视器的属性设置,但可以随时更改。在缩放因子更改后进行的测量将使用新的缩放因子,但未定义现有小部件是否会动态调整自身大小以适应新的缩放因子。

没有直接的 tkinter 接口tk scaling,但您可以使用tk.call根窗口的方法调用它。

例如,如果你知道你有一个 100dpi 的显示器,你可以像这样显式设置缩放因子:

import tkinter as tk
...
root = tk.Tk()
root.tk.call('tk', 'scaling', '-displayof', '.', 100.0/72.0)
Run Code Online (Sandbox Code Playgroud)