2013-05-02 5 views
2

matplotlib (FigureCanvas)를 사용하여 여러 캔버스를 사용하여 여러 개의 그림을 그릴 때 PyQt4를 사용하여 GUI를 만들었습니다 (이는 서브 그림을 사용하는 것이 아니라 의도적 인 것입니다). xx는 어떤 작업을 수행하기 위해 신호를 얻기 위해 캔버스의 반복을 나타냅니다matplotlib 그림 캔버스 이름

self.canvas_xx.mpl_connect('scroll_event', self.on_mouse_scroll) 

: 각 캔버스에 대해 나는 방법을 사용합니다. 차라리 사용하는 것보다 그 이름으로 캔버스를 참조 할 수 있도록하려면 :

ylabel = event.inaxes.axes.get_ylabel().split(' ')[0] 

어디에서 각 그래프의 ylabel 이름을 referncing의 긴 방법을 사용합니다.

dir (이벤트)를 사용하는 이벤트 메소드에서 보았을 때 "캔버스"라는 메서드가 있지만 캔버스의 이름을 가져올 명백한 메서드가 없습니다.

아이디어가 있으십니까?

+1

이름이 무엇을 말합니까? 'event.inaxes.axes.figure.canvas'를 통해 캔버스 객체에 대한 참조를 얻을 수 있습니다. – tacaswell

답변

2

나는 당신이 이름으로 무엇을 의미하는지 확실히 잘 모르겠지만, 당신이

event_canvas = event.inaxes.axes.figure.canvas 

그리고 당신은 dict

에 열쇠로 사용할 수 있도록 캔버스 이벤트, 해쉬 있습니다 통해 canvas 객체에 AA 참조를 얻을 수 있습니다
other_thing = pre_populated_dict[event_canvas] 

코드에서 주어진 캔버스에 대해 원하는 다른 데이터를 추적 할 수 있습니다.

파이썬에는 일반적으로 객체에 대한 참조 이름을 가져 오는 깨끗한 방법이 없습니다 (완료 할 수는 있지만 할 수는 없습니다).

+0

감사합니다! 내가 "이름"을 의미한다는 것은 이벤트를 보낸 캔버스에 대한 참조를 얻고 싶다는 것입니다 (마우스가 현재있는 위치). 즉, self.canavsxx가 이벤트를 보낸 대상을 알고 싶습니다. "self.canvas01"보낸 이벤트입니다. 하지만 그것은 깨끗한 방법이 아닌 것 같고 각 캔버스의 "ylabel"은 서로 다르므로 사용하게 될 것입니다. – Nader

+1

그러나 어떤 목적으로? 당신은 이미 관련 객체를 가지고 있습니다. – tacaswell

관련 문제