# GMenu(Python)

Tiffany Antopolski
tiffany.antopolski@gmail.com 2012
Marta Maria Casetti
mmcasetti@gmail.com 2012
GMenu의 간단한 구현체
조성호
shcho@gnome.org 2017-2019.

# GMenu

간단한 GMenu 및 SimpleAction과 사용하는 GtkApplication

# 예제 결과를 만드는 코드

from gi.repository import Gtk from gi.repository import Gio import sys

class MyWindow(Gtk.ApplicationWindow):

def __init__(self, app): Gtk.Window.__init__(self, title="GMenu Example", application=app)

class MyApplication(Gtk.Application):

def __init__(self): Gtk.Application.__init__(self)

def do_activate(self): win = MyWindow(self) win.show_all()

def do_startup(self): # start the application Gtk.Application.do_startup(self)

# create a menu menu = Gio.Menu() # append to the menu three options menu.append("New", "app.new") menu.append("About", "app.about") menu.append("Quit", "app.quit") # set the menu as menu of the application self.set_app_menu(menu)

# create an action for the option "new" of the menu new_action = Gio.SimpleAction.new("new", None) # connect it to the callback function new_cb new_action.connect("activate", self.new_cb) # add the action to the application self.add_action(new_action)

# option "about" about_action = Gio.SimpleAction.new("about", None) about_action.connect("activate", self.about_cb) self.add_action(about_action)

# option "quit" quit_action = Gio.SimpleAction.new("quit", None) quit_action.connect("activate", self.quit_cb) self.add_action(quit_action)

# callback function for "new" def new_cb(self, action, parameter): print("This does nothing. It is only a demonstration.")

# callback function for "about" def about_cb(self, action, parameter): print("No AboutDialog for you. This is only a demonstration.")

# callback function for "quit" def quit_cb(self, action, parameter): print("You have quit.") self.quit()

app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

# GSimpleAction과 GMenu에 쓸만한 메서드

33번째 줄에서 `new_action` 동작의 `"activate"` 시그널은 `widget.connect(signal, callback function)` 콜백 함수에 연결했습니다. 더 자세한 설명은 를 참조하십시오.

GSimpleAction에 쓸만한 메서드:

동작 자체에 주어진 상태를 유지하거나 이에 따르지 않아 상태를 반영하지 않는 새 동작을 만들려면 다음 코드를 사용하십시오.

action = Gio.SimpleAction.new("name", parameter_type)

여기서 `"name"`는 동작 이름, `parameter_type`은 활성화했을 때 받는 동작을 나타내는 매개변수 형식입니다. `parameter_type` 값은 `None` 또는, 매개변수 값 형식이 `str` 일 경우 `GLib.VariantType.new('s')` 또는 여기서 설명한대로 `'s'` 문자를 그냥 쓰면 됩니다. 새 상태 반영(무상태 아님) 동작을 만들려면 다음 코드를 사용하십시오.

action = Gio.SimpleAction.new_stateful("name", parameter_type, initial_state)

여기서 `initial_state`는 GVariant 형식으로 정의합니다. 이를 테면 `Glib.Variant.new_string('start')` 코드가 있습니다. 가능한 코드를 보려면 이 문서를 참고하십시오.

`set_enabled(True)` 함수는 동작 활성화를 설정하며, 활성화하거나 외부 호출자가 상태를 바꾸게 하려면 반드시 동작을 활성화해야 합니다. 이 함수는 동작 구현체에서만 호출해야 합니다. 동작 사용자는 활성 플래그를 수정하지 못하게 해야합니다.

`set_state(state)` 함수는 주어진 값으로 'state' 속성 값을 업데이트하여 동작의 상태를 설정하며, `state` 는 GVariant 형식입니다. 이 함수는 동작 구현체에서만 호출해야합니다. 동작 사용자는 상태 전환을 요청하려면 이 함수 대신 `change_state(state)`(`state` 값은 위에서 설명) 함수를 사용해야합니다.

GMenu에 쓸만한 메서드:

항목을 메뉴의 `position` 위치에 넣으려면 `insert(position, label, detailed_action)` 함수를 활용하십시오. 여기서 `label` 은 메뉴에 나타나는 레이블이며, `detailed_action` 는 앞에 `app.`이 뭍는 동작 이름으로 이루어진 문자열이 들어갑니다. 이 부분에 대한 자세한 이야기에는 에 있습니다.

메뉴에 항목을 뒤에 붙이려면 `append(label, detailed_action)` 함수를, 앞에 붙이려면 `prepend(label, detailed_action)` 함수를 사용하십시오.

메뉴에 항목을 추가하는 다른 방법으로는 `GMenuItem` 항목을 만들고 `insert_item(position, item)`, `append_item(item)`, `prepend_item(item)` 함수를 사용하는 방법입니다. 그러니까 예를 들면 다음 코드와 같습니다:

about = Gio.MenuItem.new("About", "app.about") menu.append_item(about)

메뉴에 `insert_section(position, label, section)`, `append_section(label, section)`, `prepend_section(label, section)` 함수로 전체 하위 섹션을 추가할 수 있습니다. 여기서 `label`은 하위 섹션의 제목입니다.

나타내고 숨길 하위 메뉴를 추가하려면 `insert_submenu(position, label, section)`, `append_submenu(label, section)`, `prepend_submenu(label, section)` 함수를 사용하십시오. 여기서 `label`은 하위 섹션의 제목입니다.

메뉴 항목을 제거하려면 `remove(position)` 함수를 사용하십시오.

메뉴에 레이블을 설정하려면 `set_label(label)` 함수를 사용하십시오.

# API 참고서

이 예제는 다음 참고자료가 필요합니다:

GMenu

GSimpleAction

GVariantType

GVariant