2012-02-28 3 views
0

이것은 아마도 어리석은 일이지만 실제로 나 자신을 이해할 수는 없습니다.PyQT에서 메뉴 작업 바인딩하기

QtGui.QAction에 래퍼 클래스를 사용하고 있습니다. 코드는 다음과 같이 바뀝니다.

class Action_Abstract(Abstract): 

    def __init__(self, app, menu): 
     Abstract.__init__(self, app) 

     action = QtGui.QAction(self.get_window()) 
     action.setText('Text') 
     action.triggered.connect(self.execute) 

     menu.addAction(action) 

    def execute(self): 
     print 'Called' 

오류가 발생하지 않고 동작이 메뉴에 표시됩니다. 하지만 action을 클릭하면 self.execute가 호출되지 않습니다. 재미있는 점은 self.execute를 예제의 QtGui.qApp.quit으로 바꾸면 작동한다는 것입니다.

무엇이 여기에 있습니까?

답변

2

Action_Abstract의 인스턴스에 대한 참조를 유지 하시겠습니까?

그렇지 않으면 문제는 파이썬 개체가 가비지 수집되어 self.execute에 대한 연결을 끊을 수 있다는 것입니다.

+0

고맙습니다, 친절하겠습니다. 그것이 문제였습니다. 나는 여전히 파이썬으로 배우는 것이 많다. – Nameless