2012-10-26 3 views
1

의 다른 클래스에서 함수를 호출하는 방법 I가 (PyQt4 사용) 파이썬 프로그램의 다음 개요 :파이썬

class Polygon(QtGui.QGraphicsItem): 

    def __init__(self): 
     super(Polygon, self).__init__() 

    def addpoint(self, point): 
     if last_point: 
      # trying to add auto-save here 

class MainWidget(QtGui.QWidget): 

    openFileName = "" 
    list_of_polygons = [] 

    def __init__(self): 
     super(MainWidget, self).__init__() 

    def openFile(self): 
     call dialog 
     self.openFileName = ... 

    def saveFile(self): 
     # needs to access a couple something with self.variables, like self.openFileName 


def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = MainWidget() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

기능 내가 객체에 태그를 다각형을 만드는거야 이미지 뷰어입니다. 다각형이 생성되면 자동 저장을 호출하고 싶습니다.

그래서 폴리곤을 저장하려면 saveFile 함수 MainWidget 클래스에서 호출해야합니다. 내 문제는 저장 기능이 MainWidget 클래스에 구현되어 있으며 Polygon 클래스 내부에서 액세스하는 방법을 알지 못합니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? saveFile을 전역으로 설정해야합니까? 그렇다면, 어떻게 자아에 접근 할 수 있습니까? MainWidget의 변수는 무엇입니까?

+0

진실하게, 당신은 모든'addpoint()'이후에 앱이'saveFile()'을 할 필요가 있다고 생각합니까? 특히 점이 사용자에 의해 대화식으로 생성되는 경우 느리게 들립니다. – martineau

+0

각 다각형에는 약 4-10 점이 있습니다. 다각형이 완성되면 저장하고 있습니다. 코드에 포함시키지 마십시오. – zsero

답변

2

당신은 아마 그것의 "부모"위젯 객체가 무엇인지 알 수 있도록 당신이 그것을 만들 때 다각형에 위젯 개체를 전달해야합니다

class Polygon(QtGui.QGraphicsItem): 

    def __init__(self, parent): 
     self.parent = parent 
     # ... 

(다음 foo = Polygon(your_widget) 당신이 그것을 만들).


그러면 self.parent.saveFile(...) 또는 그 외의 것으로 호출 할 수 있습니다.