WxPerl,从 wxPoint 对象获取坐标

WxPerl, getting coordinates from wxPoint object

我想解决这个问题。

  1. 从特定帧获取位置 (wxFrame) (function GetPosition() return WxPoint)
  2. 将位置 (x, y) 序列化到文件
  3. 设置从文件到另一个文件的位置window

除了从 WxPoint 对象获取坐标 x 和 y 之外,一切都很好。 我不知道,如何访问此对象的属性 "x"、"y"。例如,wxPython 允许使用“somepoint.x”,但是 WxPerl 呢? somepoint->{"x"} 不起作用,因为对象是 SCALAR 引用..

谢谢

解决方案是使用($pwxPoint 的实例):

my $p = $f->GetPosition(); 
$p->x(); $p->y()

以下应该符合您的要求:

my $point = $frame->GetPosition;

my $x = $point->x;
my $y = $point->y;

wxPerl 及其文档有点像编程马拉松。例如,许多包仅在库的 XS 组件中定义,因此几乎无法调试。 (这就是为什么您的 Wx::Point 对象是标量引用;标量值只是对象数据的句柄。)

我已经搜索过但未能找到一大块我记得从某处解释 WxPerl 通过 Perl 方法调用以相同方式访问属性和方法的文档

如果您查看 wxPoint Class Reference,您会看到有三个构造函数:一个没有参数 returns [0,0] 处的一个点,一个采用 x 和 y 坐标,以及一个接受现有 wxPoint 对象并使用其坐标的复制构造函数。最后一个在 wxPerl 中不起作用。您必须自己发现许多类似的怪事,因为文档令人震惊

同样,各种 "operators" 与 wxPerl 无关。如果运算符过载,它们可以工作,但 wxPerl 是为速度而构建的,所以它被丢弃了

正如其他人所描述的,xy 这两个属性必须作为方法调用来访问。 (这同样适用于 wxPerl 中所有其他 类 的属性。)

所以你可以这样写

my $x = $p->x;
my $y = $p->y;

或者,如果你想变得时髦

my ($x, $y) = map { $p->$_ } qw/ x y /;