2016-09-19 13 views
0

Я хочу решить эту проблему.WxPerl, получая координаты от объекта wxPoint

  1. прибудет позиция из конкретного кадра (wxFrame) (функция GetPosition() возвращение WxPoint)
  2. Serialize положения (х, у) в файл
  3. заданной позиции из файла в другое окно

Everythink в порядке, за исключением получения координат x и y от объекта WxPoint. Я не знаю, как я могу получить свойства «x», «y» этого объекта. например, wxPython позволяет это «somepoint.x», но WxPerl? somepoint->{"x"} не работает, потому что объект является ссылка SCALAR ..

Спасибо

+1

Это только предположение, но это работает: 'my $ p = $ f-> GetPosition(); $ Р-> х(); $ p-> y(); ' – stevieb

+1

Точно! Спасибо – stepan

+0

Теперь я ответил, что вы подтвердили его работоспособность. – stevieb

ответ

0

Ниже следует делать то, что вы ищете для:

my $point = $frame->GetPosition; 

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

Объяснение будет приятным – Borodin

-1

Решение является использование ($p является экземпляром wxPoint):

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

'wxPoint' не является классом Perl – Borodin

1

wxPerl и его документация немного хакатон. Например, многие пакеты определены только в компонентах XS библиотеки, поэтому отлаживать их практически невозможно. (Вот почему ваш объект Wx::Point является скалярной ссылкой, скалярное значение - всего лишь дескриптор данных объекта.)

Я охотился и не смог найти кусок документации, который я помню откуда-то, что объясняет, что WxPerl обращается к обоим атрибуты и методы таким же образом, методом вызова Perl

Если вы посмотрите на wxPoint Class Reference, вы увидите, что есть три конструктора: один без параметров, который возвращает точку в [0,0], которая принимает x и y и конструктор копирования, который принимает существующий объект wxPoint и использует его координаты. Последний из них не работает в wxPerl. Есть много подобных странностей, которые вы должны обнаружить для себя, потому что документация ужасна

Подобным образом различные «операторы» не имеют отношения к wxPerl. Они могли бы работать, если оператор был перегружен, но wxPerl построен для скорости, поэтому он был отброшен.

Как и другие, описанные два атрибута x и y должны быть доступны как вызовы методов. (То же самое относится и к атрибутам всех других классов в wxPerl.)

Таким образом, вы можете написать

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

Или, если вы хотите, чтобы получить фанки

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

 Смежные вопросы

  • Нет связанных вопросов^_^