2017-01-31 4 views
3

Не могу найти информацию или примеры о "Gtk.Application" в Genie.Gtk.Application in Genie

Каков правильный способ использования класса Gtk.Application в Genie?

Добрый день и спасибо

EDIT: Я не знаю, если это лучший способ сделать это, но мой код это:

// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
uses Gtk 

class MyApplication : Gtk.Application 
    def override activate()   
     var window = new Gtk.ApplicationWindow (this) 
     window.title = "Welcome to GNOME" 
     window.set_default_size (400, 400) 
     window.show() 

init 
    new MyApplication().run (args) 

ответ

5

Вы пример выглядит довольно хорошее начало для меня, но я думаю, вы должны добавить ID приложения и некоторые флаги приложений.

Три полезных ресурса - это GTK+3 Reference Manual's documentation for GtkApplication, страница раздела «HowDoI» GNOME Wiki под названием "Using GtkApplication" и GIO Reference Manual's documentation for GApplication. GApplication или GLib.Application в привязке Vala, является родительским классом для GtkApplication.

На странице "HowDoI" советует:

GtkApplication не реализует основной() для вас. Вы должны сделать это сами. Ваша функция main() должна быть как можно меньше и делать почти ничего, кроме создания GtkApplication и запускать ее. «Реальная работа» всегда должна выполняться в ответ на сигналы, запускаемые GtkApplication.

Ваша main() функция Genie является:

init 
    new MyApplication().run(args) 

и это примерно так же просто, как вы можете получить.

На странице «HowDoI» также советует:

При запуске приложения, сигнал запуска будет уволен. Это дает вам возможность выполнять задачи инициализации, которые напрямую не связаны с отображением нового окна. После этого, в зависимости от того, как приложение запускается, активируется или открывается, будет вызываться дальше.

У вас нет заданий запуска с вашим примером, и это нормально. Поэтому нет необходимости использовать сигнал startup, но вы используете сигнал activate, переопределяя виртуальную функцию с помощью def override activate(). activate фактически является сигналом по умолчанию, когда запускается Gtk.Application, но могут быть выбраны альтернативные сигналы, когда установлены соответствующие ApplicatonFlags. Например, если установлен флаг HANDLES_OPEN, тогда сигнал open будет отправлен, если есть аргументы командной строки, которые не были проанализированы. Непараметрированные аргументы считаются именами файлов или URI. Флаги по умолчанию: FLAGS_NONE, и это будет сделано явно в примере кода позже.

раздел В GTK + 3 Справочное руководство по GtkApplication гласит:

В настоящее время GtkApplication обрабатывает GTK + инициализации, приложения уникальность, управление сеансами, предоставляет некоторые базовые создания сценариев и настольных оболочки интеграции экспортируя действия и меню и управляет список окон верхнего уровня, жизненный цикл которых автоматически привязан к жизненному циклу вашего приложения ... Если идентификатор приложения не задан, некоторые функции (в особенности уникальность приложения) будут отключены. Идентификатор нулевого приложения разрешен только с GTK + 3.6 или новее.

Идентификатор приложения должен состоять как минимум из двух имен, разделенных точкой. Если приложение запускается второй раз, то окно второго экземпляра становится частью первого приложения, но второй экземпляр приложения затем закрывается. Это уникальная функция приложения и может быть отключена с помощью ApplicationFlags.NON_UNIQUE. Приложение регистрируется на шине сеанса, используя идентификатор приложения. Если вы используете Linux, вы можете использовать такой инструмент, как D-Feet, чтобы увидеть, как приложение появляется на шине сеанса, а также что происходит при повторном запуске приложения (вам нужно обновить представление).

Время для кода:

// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
[indent=4] 
uses Gtk 

init 
    new MyApplication("org.genie.Example.SimpleGtkApplication", 
        ApplicationFlags.FLAGS_NONE 
        ).run(args) 

class MyApplication:Gtk.Application 
    construct(application_id:string, flags:ApplicationFlags) 
     if !id_is_valid(application_id) 
      error("application id %s is not valid", application_id) 
     this.application_id = application_id 
     this.flags = flags 

    def override activate() 
     var window = new Gtk.ApplicationWindow(this) 
     window.title = "Welcome to GNOME" 
     window.set_default_size(400, 400) 
     window.show() 

Это добавляет идентификатор приложения и делает ApplicationFlags явным.

+0

Большое спасибо за ваш ответ. Ваш ответ помогает мне лучше понять это. Я продолжу практиковать с классом Gtk.Application в Genie. – Webierta

2

Ну, я все еще добиваюсь прогресса.

Я написал этот код с Gtk.Application который запускает простой скриншот:

// compila con valac --pkg gtk+-3.0 nombre_archivo.gs 
uses Gtk 

init 
    new MyApplication("captura.escritorio", 
     ApplicationFlags.FLAGS_NONE 
     ).run(args) 

class MyApplication:Gtk.Application 

    construct(application_id:string, flags:ApplicationFlags) 
     if !id_is_valid(application_id) 
      error("application id %s is not valid", application_id) 
     this.application_id = application_id 
     this.flags = flags 

    def override activate() 
     var window = new Gtk.ApplicationWindow(this) 
     window.title = "Escritorio"    
     window.border_width = 10   
     window.window_position = WindowPosition.CENTER  

     var grid = new Gtk.Grid() 
     window.add (grid) 

     var boton = new Button.with_label ("Capturar")  
     boton.clicked.connect(btn) 
     boton.border_width = 10 
     grid.attach(boton, 0, 0, 2, 1) 

     var boton_salir = new Button.with_label ("Salir") 
     boton_salir.clicked.connect(btn_salir) 
     boton_salir.border_width = 10 
     grid.attach(boton_salir, 2, 0, 2, 1) 

     window.show_all()  

    def btn(btn:Button) 
     escritorio: Gdk.Window = Gdk.get_default_root_window() 
     ancho: int = escritorio.get_width() 
     alto: int = escritorio.get_height() 
     screenshot: Gdk.Pixbuf = Gdk.pixbuf_get_from_window(escritorio, 0, 0, ancho, alto) 
     try 
      screenshot.save("screenshot.png","png") 
     except e: GLib.Error 
      stderr.printf ("Error: %s\n", e.message) 

    def btn_salir(btn:Button)  
     this.quit() 

Я хочу поставить его здесь, потому что есть очень мало примеров Gtk.Application с Genie.

Спасибо

Смежные вопросы