2016-09-19 4 views
0

Je veux résoudre ce problème.wxPerl, obtenir les coordonnées de wxPoint objet

  1. position get du cadre (wxFrame) spécifique (fonction GetPosition() retourne WxPoint)
  2. position de sérialisation (x, y) à déposer
  3. position de consigne à partir du fichier vers une autre fenêtre

Tout est ok, sauf obtenir les coordonnées x et y de l'objet WxPoint. Je ne sais pas, comment puis-je accéder aux propriétés "x", "y" de cet objet. Par exemple, wxPython le permet par "somepoint.x", mais WxPerl? somepoint->{"x"} ne fonctionne pas, car l'objet est référence SCALAIRE ..

Merci

+1

Ceci est juste une supposition, mais cela fonctionne-t-il: 'my $ p = $ f-> GetPosition(); $ p-> x(); $ p-> y(); ' – stevieb

+1

Exactement! Merci – stepan

+0

J'ai fait une réponse maintenant que vous avez confirmé le fonctionnement. – stevieb

Répondre

0

qui suit devrait faire ce que vous cherchez pour:

my $point = $frame->GetPosition; 

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

Une explication serait bien – Borodin

-1

La solution est l'utilisation ($p est instance de wxPoint):

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

'wxPoint' n'est pas une classe Perl – Borodin

1

wxPerl et sa documentation sont un peu un hackathon. Par exemple, de nombreux paquets sont définis uniquement dans les composants XS de la bibliothèque, il est donc pratiquement impossible de déboguer. (C'est pourquoi votre objet Wx::Point est une référence scalaire, la valeur scalaire est juste une poignée sur les données de l'objet.)

J'ai cherché et échoué à trouver une partie de la documentation dont je me souviens de quelque part qui explique que WxPerl accède à la fois attributs et méthodes de la même manière, par un appel de méthode Perl

Si vous regardez le wxPoint Class Reference vous verrez qu'il y a trois constructeurs: un sans paramètre qui retourne un point à [0,0], un qui prend coordonnées x et y et un constructeur de copie qui accepte un objet wxPoint existant et utilise ses coordonnées. Le dernier d'entre eux ne fonctionne pas dans wxPerl. Il y a beaucoup de bizarreries semblables que vous devez découvrir par vous-même, parce que la documentation est épouvantable

De même, les différents « opérateurs » ne sont pas pertinents pour wxPerl. Ils pourraient travailler si l'opérateur était surchargé, mais wxPerl est construit pour la vitesse cela a donc été mis au rebut

Comme d'autres ont décrit, les deux attributs x et y doivent être accessibles comme les appels de méthode. (De même pour les attributs de toutes les autres classes wxPerl.)

vous pouvez donc écrire

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

Ou, si vous voulez obtenir froussard

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