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

问题描述 投票:0回答:2

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

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

python user-interface tkinter
2个回答
10
投票

这在 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 将屏幕距离指定为浮点数,后跟以下指示单位的字符之一:

该数字指定以像素为单位的距离。

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 参数,则默认为主窗口。如果省略数字参数,则返回缩放因子的当前值。

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

没有直接到

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

例如,如果您知道自己有 100dpi 显示器,则可以显式设置缩放系数,如下所示:

import tkinter as tk
...
root = tk.Tk()
root.tk.call('tk', 'scaling', '-displayof', '.', 100.0/72.0)

0
投票

canvas.yview_scroll(9, "units")
的情况下,除非您指定,否则单位默认为窗口大小的 1/10,在本例中为 1 像素:

canvas.config(
    xscrollcommand=scrollx.set,
    xscrollincrement=1,
    yscrollcommand=scrolly.set,
    yscrollincrement=1,
)

如果没有这些滚动增量参数,9 个单位将等于 1 页。我找不到从哪里获得这些默认值。

© www.soinside.com 2019 - 2024. All rights reserved.