【问题标题】:What are 'screen units' in tkinter?tkinter 中的“屏幕单位”是什么?
【发布时间】:2017-01-20 23:24:16
【问题描述】:

我在阅读下面链接中的回复时遇到了“屏幕单元”,但在 Jim Denney 的回复中找不到“屏幕单元”到底指的是什么。我知道它们不是像素。

How do I use Tkinter to create line-wrapped text that fills the width of the window?

【问题讨论】:

  • 如何说显示单位不是像素?
  • 顺便说一句:Tkinter doc"distance - Screen distances can be specified in either pixels or absolute distances. Pixels are given as numbers and absolute distances as strings, with the trailing character denoting units: c for centimetres, i for inches, m for millimetres, p for printer’s points. For example, 3.5 inches is expressed as "3.5i".

标签: python user-interface tkinter


【解决方案1】:

这在tkinter python documentation 中有非常简短的提及,虽然它没有使用短语“屏幕单元”:

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

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

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

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

所以,“屏幕单位”是Tk_GetPixels 可以接受的任何东西。 Tk_GetPixels man page 是这样说的:

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

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

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

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

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

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

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

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

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 倍。缩放因子的初始值是在应用程序启动时根据已安装监视器的属性设置的,但可以随时更改。缩放因子更改后进行的测量将使用新的缩放因子,但未定义现有小部件是否会动态调整自身大小以适应新的缩放因子。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多