Blame platform-demos/ko/signals-callbacks.py.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:e="http://projectmallard.org/experimental/" type="guide" style="task" id="signals-callbacks.py" xml:lang="ko">
Packit 1470ea
Packit 1470ea
<info>
Packit 1470ea
  <title type="text">시그널과 콜백 함수(Python)</title>
Packit 1470ea
  <link type="guide" xref="beginner.py#theory"/>
Packit 1470ea
  <link type="next" xref="button.py"/>
Packit 1470ea
  <revision version="0.1" date="2012-06-16" status="draft"/>
Packit 1470ea
Packit 1470ea
  <desc>GTK+의 시그널과 콜백 함수를 설명합니다.</desc>
Packit 1470ea
  <credit type="author copyright">
Packit 1470ea
    <name>Sebastian Pölsterl</name>
Packit 1470ea
    <email its:translate="no">sebp@k-d-w.org</email>
Packit 1470ea
    <years>2011</years>
Packit 1470ea
  </credit>
Packit 1470ea
  <credit type="editor">
Packit 1470ea
    <name>Marta Maria Casetti</name>
Packit 1470ea
    <email its:translate="no">mmcasetti@gmail.com</email>
Packit 1470ea
    <years>2012</years>
Packit 1470ea
  </credit>
Packit 1470ea
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>조성호</mal:name>
Packit 1470ea
      <mal:email>shcho@gnome.org</mal:email>
Packit 1470ea
      <mal:years>2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
<title>시그널과 콜백 함수</title>
Packit 1470ea
Packit 1470ea
<links type="section"/>
Packit 1470ea
Packit 1470ea
<section id="overview">
Packit 1470ea
<title>개요</title>
Packit 1470ea
Packit 1470ea

GUI 툴킷처럼 GTK+ 에도 이벤트 주도 프로그래밍 모델을 사용합니다. 사용자가 아무 동작도 취하지 않으면 GTK+는 메인 루프상에 머무르며 입력을 기다립니다. 사용자가 어떤 동작을 취하면 - 마우스 클릭이라 칩시다 - 메인 루프가 "깨어나고" GTK+에 이벤트를 전달합니다.

Packit 1470ea
Packit 1470ea

위젯에서 이벤트를 받으면 하나 이상의 시그널을 내보냅니다. 시그널은 프로그램에 "기다리고 있던 무슨 일이 일어났다"는 사실을 시그널에 연결한 함수를 실행하여 알립니다. 이런 함수는 보통 콜백이라고 합니다. 콜백 함수를 실행하면 보통 어떤 동작을 취합니다. 콜백 함수 실행이 끝나면 GTK+에서 메인 루프로 돌아와서 다른 사용자의 입력을 기다립니다.

Packit 1470ea
Packit 1470ea

일반적인 예를 들자면 handler_id = widget.connect("event", callback, data) 코드가 있습니다. widget는 우리가 앞서 만든 인스턴스입니다. 그 다음 event는 우리가 기다리는 부분입니다. 각 위젯은 사용자의 동작으로 나타나는 자체 이벤트가 있습니다. 예를 들어 Gtk.Button에서 보통 여러분은 "clicked" 이벤트에 연결하고 싶어합니다. 단추를 누르면 시그널이 나온단 얘깁니다. 다른 예를 들자면 notify::property 시그널을 들 수 있습니다. GObject에서 언제든 <link xref="properties.py">property</link>를 수정했든지간에 notify 시그널을 내보내는 대신, GObject에서 수정한 속성 이름으로 더욱 자세한 상황을 시그널로 내보냅니다. 이런 방식을 통해 여러 이벤트 중 오직 하나의 속성이 바뀐 사실에 대해서만 받을 수 있습니다. 세번째로 이 콜백 매개변수는 콜백 함수의 인자 이름이며, 이 매개변수에는 지정 형식으로 시그널을 내보냈을때 실행할 코드가 들어있습니다. 마지막으로, 추가 데이터 인자에는 시그널을 내보냈을 떄 전달해야 할 데이터가 들어갑니다.

Packit 1470ea
Packit 1470ea

함수에서는 이 시그널-콜백 함수 쌍을 구분하는 번호(handler_id) 값을 반환합니다. 이 번호 값은 widget.disconnect(handler_id) 처럼 시그널에서 앞으로 쓸 일이 없는 콜백 함수를 끊거나 시그널을 계속 내보내는 상황일 경우 필요합니다.

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="references">
Packit 1470ea
Packit 1470ea
<title>참고 자료</title>
Packit 1470ea

GObject 문서의 <link href="http://developer.gnome.org/gobject/stable/signal.html">시그널</link>

Packit 1470ea

Python GTK+ 3 따라하기 지침의 <link href="http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.html">메인 루프와 시그널 기본</link>

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
</page>