0

내가 pygtk에서 이해하지 못하는 것이 있습니다 :pygtk, 콜백 방법과 controlleur

내가 여러 서버에 먼 네트워크 구성을 조작하기 위해 slqlite 데이터베이스 와 상호 작용하는 GUI를 구축하는 시도가.

그래서 내가 세 개의 파일합니다

Mygui.py 느릅 나무는 모든 pygtk 지침이 들어

을; Mydata.py에는 모든 sqlite 조작 이 포함되어 있으며 마지막으로 Mygui는 Mygui와 sqlite 간의 상호 작용을 수행해야합니다.

하지만 난 콜백 fonctions과 정의를 구현하는 방법을 볼 수 없습니다 : Myapp.py의 논문 라인

:

class Myapp(): 
    def __init__(): 
     self.data = Mydata() 
     self.gui = Mygui() 

을 ...

와 같은 라인

Mygui.py의 다음 항목 :

class Mygui(): 
    def __init__(): 

... self.Base _menu = gtk.Menu() self.contenu_item = gtk.MenuItem ('contenu의 기본 ") 거짓 아마 (self.contenu_item) ... # 명이

 self.contenu_item("activate", contenu_callback) 

내가 생각 self.Base_menu.append () "contenu_callback" Myapp.py에 있어야합니다 디스플레이와 데이터베이스를 연결합니다 하지만 어떻게 이해가 안되니?


(edit after 5 minutes) 

대답을 주셔서 감사합니다하지만 난 이해할 수 있는지 확실하지 않습니다 올바르게 : 그래서 내가 마지막 줄에서 이해하면 모듈 "MyGui.py" 에 내가 "import Myapp.py()"를 추가해야한다는 것입니다 전화 할 수 있도록 "Myapp.activate_callback" ("other.module" in this case being Myapp).

전 세계적으로 "import Mydata"와 "import Mygui"를 포함하는 "Myapp.py"와 "import pygtk"와 "import Myapp"를 포함 할 모듈 "Mygui.py"도 갖게 될 것입니다.

나는 "MyApp를"

를 가져옵니다 "Myapp.py"느릅 나무 가져 오기 "MyGui" 와 "MyGui"느릅 나무 사이의 순환과 관련하여 매우 만족하지 생각합니다.

애플리케이션 처리와 GUI 프로 시저를 분리하려면이 작업을 수행해야합니까?

답변

0

콜백은 호출 가능할 수 있으므로 입니다.은 사용자가 지정합니다.

+0

답변을 주셔서 감사합니다. 그러나 정확하게 이해한다면 확실하지 않습니다. –

0

얼마나 엄격하게 분리하려고하는지에 따라 다릅니다.당신이 그것에 대해 조금 느슨하기 원하는 경우, 당신은 Mygui 인스턴스 자체를 전달 MyApp를 가질 수있다, 다음 Mygui은 MYAPP에 메서드를 호출 할 수 있습니다 :

class Myapp(): 
    def __init__(): 
     self.data = Mydata() 
     self.gui = Mygui(self) 

을 아니면 Mygui에 이벤트의 무리를 정의 할 수 있습니다, Myapp에서 해당 이벤트에 대한 핸들러를 등록하도록하십시오.

class Myapp(): 
    def __init__(): 
     self.data = Mydata() 
     self.gui = Mygui() 
     self.gui.connect("record-saved", self.record_saved_handler) 

후자는 더 분리되지만 더 많은 의식이 포함됩니다.

+0

대단히 감사합니다. 그것은 내가 찾고 있던 마지막 줄 "self.gui.connect ..."입니다. –

+0

나는 방금 내 대답에서 세부 사항을 잊었다는 것을 깨달았다. 거기서하는 일은 개념적으로 또 다른 이벤트이지만, pygtk의 이벤트 인프라를 사용하여 보내야한다는 규칙은 없습니다. Myapp가 자체적으로 추가하는 gui의 호출 가능 목록이 있거나 Myapp에서 구현을 제공하는 인터페이스가 있거나 GUI 라이브러리의 이벤트 인프라를 사용할 수도 있습니다. – Iain