이것이 우리가 RabbitVCS에서하는 방법입니다. 본질적으로 메인 애플리케이션은 대화 상자를 생성하고 PyGTK gtk.Dialog run() method을 사용하여 실행합니다.
우리가 가지고있는 주요 응용 프로그램 (action.py 참조)에서 내려 속보 :
def get_login(self, realm, username, may_save):
# ...other code omitted...
gtk.gdk.threads_enter()
dialog = rabbitvcs.ui.dialog.Authentication(
realm,
may_save
)
result = dialog.run()
gtk.gdk.threads_leave()
return result
이 "get_login"기능은 PySVN 클라이언트 인스턴스에 given as the callback 인 하나입니다.
threads_enter() 및 threads_leave() 메서드에 유의하십시오. 이것들은 GTK가 파이썬 쓰레드를 사용할 수있게하지만 GIL은 다른 확장에 의해 잠길 수 있습니다. 이것은 무엇을
이 대화 상자를 만드는 것입니다 (dialog.py 참조) (이미 Glade을 사용하여 배치), 그 클래스의 run() 메소드는 PyGTK 방법에 대한 래퍼입니다 :
def run(self):
returner = None
self.dialog = self.get_widget("Authentication")
result = self.dialog.run()
login = self.get_widget("auth_login").get_text()
password = self.get_widget("auth_password").get_text()
save = self.get_widget("auth_save").get_active()
self.dialog.destroy()
if result == gtk.RESPONSE_OK:
return (True, login, password, save)
else:
return (False, "", "", False)
RabbitVCS UI를 코드는 아마도 당신이 필요로하는 것보다 훨씬 복잡하지만, 주위를 찌르는 데 도움이 될 수 있습니다. 이러한 "get_widget"호출은 Glade 트리에서 위젯을 가져 오는 편리한 메소드입니다. Glade를 사용하지 않는 경우, 위젯에 대한 참조가 직접 생깁니다.
나는 그것이 도움이 :)
내가 pysvn에 대해 아무것도 몰라 희망,하지만 난 콜백이 당신이 SVN 코드를 호출 동일한 스레드에서 호출되어 가정 것입니다. 별도의 스레드에서 로그인을 요청할 수있는 pysvn을 호출 해 보았습니까? – doublep
파일을 사용하여 정보를 저장하고 메인 루프가 다음 반복에서 정보를 얻도록 할 수 있습니다. – Eldelshell
콜백 사용 방법을 보여주는 코드 스 니펫을 게시 할 수 있습니까? –