【问题标题】:TclTk image width always returns zeroTclTk 图像宽度始终返回零
【发布时间】:2020-09-10 13:39:50
【问题描述】:

Linux Debian 杰西

我在 TclTk 中创建了一张照片图像。创建后,我想查询实际宽度,以便我可以使用它。我在 MWE 中使用常量 500 时,在实际程序中不太明显。

% puts $tcl_version
8.6
% package require Tk
8.6.2
% set i [image create photo p0 -width 500]
p0
% #not correct
% image width p0
0
% #correct
% p0 cget -width
500

来自图像手册页:

图像宽度 名称

返回一个十进制字符串,给出图像 name 的宽度(以像素为单位)。

所以我会期待

image width p0

还返回宽度的十进制值。 cget 命令确实返回了我所期望的结果。

我做错了什么?

【问题讨论】:

  • 它需要有一个图像有一个宽度(像素)。目前您的图片为空。
  • 为什么 p0 cget -width 返回正确的宽度?是同一张图片
  • @Jerry 高度为 1 根据正确宽度下方的答案返回。但是一个函数调用返回一个值而另一个不返回是没有意义的。
  • $im cget -width 返回您已配置的内容,但image width $im 返回可能不同的真实宽度。在您的情况下,您的 area 为零,因此照片图像类型会优化并表示没有可显示的内容。
  • 这再次阐明了为什么一个命令返回的东西与另一个不同。没有返回实际宽度正是发生的事情。这在配置图像时造成了不良影响。使用 tclmuPDF saveImage 方法。我可以通过计算和设置图像宽度和高度来轻松解决它。或者省略任一设置并指示 tclmuPDF 以所需大小存储图像。你只需要知道它。

标签: image tcl width tk


【解决方案1】:

试试:

set i [image create photo p0 -width 500 -height 1]

显然,高度无效的图像没有宽度。

【讨论】:

  • 确实,高度为 1 时会返回正确的宽度。但是为什么这两个调用有区别呢?
  • @HansLinkels cget 返回配置的内容,image width 返回图像的宽度。
  • 关键是不可能配置至少从表面上看彼此不兼容的东西。图像类型必须解决这个问题(例如,通过优先规则说明要忽略的内容)。此外,图像可以有一个宽度,而无需配置。但是所有图像都肯定有一个真实的宽度;这是他们基本定义的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多