繁体   English   中英

Python GUI:tkinter中的“屏幕单元”是什么?

[英]Python GUI: What are 'screen units' in tkinter?

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

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

尽管它不使用短语“ screen unit”,但在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或字符串都将屏幕距离指定为浮点数,后跟指示单位的以下字符之一:

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

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

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

例如,如果您知道有一台100dpi的显示器,则可以像下面这样显式设置缩放比例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM