首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Genie中的Gtk.Application

Genie中的Gtk.Application
EN

Stack Overflow用户
提问于 2017-01-31 21:36:45
回答 2查看 717关注 0票数 5

我在Genie中找不到关于"Gtk.Application“的信息或例子。

在Genie中使用Gtk.Application类的正确方法是什么?

日安,谢谢

编辑:我不知道这是否是最好的方法,但我的代码如下:

代码语言:javascript
复制
// 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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 01:33:14

您的示例对我来说是一个很好的开端,但我认为您应该添加一个应用程序ID和一些应用程序标志。

三个很好的资源是GTK+3参考手册中的GtkApplication文档、GNOME Wiki "HowDoI“部分的页面“使用GtkApplication”GIO参考手册的GApplication文档。GApplication (即Vala绑定中的GLib.Application )是GtkApplication的父类。

"HowDoI“页面建议:

GtkApplication不为您实现main()。你必须自己去做。main()函数应该尽可能小,除了创建和运行GtkApplication之外,几乎什么也不做。“真正的工作”应该总是响应GtkApplication发出的信号。

您在Genie中的main()功能是:

代码语言:javascript
复制
init
    new MyApplication().run( args )

这是你所能得到的最简单的。

"HowDoI“页面还建议:

当应用程序启动时,启动信号将被触发。这使您有机会执行与显示新窗口无关的初始化任务。之后,根据启动应用程序的方式,下一步将调用“激活”或“打开”。

您没有使用您的示例执行任何启动任务,这很好。因此,不需要使用startup信号,但是您是通过使用def override activate ()重写虚拟函数来使用activate信号的。activate实际上是运行Gtk.Application时的默认信号,但在设置适当的ApplicatonFlags时可以发出替代信号。例如,如果设置了HANDLES_OPEN标志,则如果存在未解析的命令行参数,则将发送open信号。未解析的参数被视为文件名或URI。默认标志是FLAGS_NONE,这将在后面的示例代码中显式显示。

“GTK+3参考手册”关于GtkApplication的一节规定:

目前,GtkApplication处理GTK+初始化、应用程序唯一性、会话管理,通过导出操作和菜单提供一些基本的脚本性和桌面shell集成,并管理一个toplevel窗口的列表,这些窗口的生命周期自动绑定到application...If的生命周期--没有给出应用程序ID --那么一些特性(尤其是应用程序唯一性)将被禁用。只有在GTK+ 3.6或更高版本中才允许使用空应用程序ID。

应用程序ID应该由至少两个由一个点分隔的名称组成。如果应用程序第二次运行,那么第二个实例的窗口将成为第一个应用程序的一部分,但是第二个应用程序实例随后被关闭。这是应用程序唯一性特性,可以使用ApplicationFlags.NON_UNIQUE禁用。应用程序是使用应用程序ID在会话总线上注册的。如果您使用的是Linux,可以使用像双脚这样的工具来查看应用程序出现在会话总线上,以及再次运行应用程序时会发生什么(需要刷新视图)。

是时候编写一些代码了:

代码语言:javascript
复制
// 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_all()

这将添加一个应用程序ID,并使ApplicationFlags显式化。

票数 7
EN

Stack Overflow用户

发布于 2017-02-01 17:01:50

我还在进步。

我用Gtk.Application编写了这段代码,运行了一个简单的屏幕截图:

代码语言:javascript
复制
// 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的例子。

谢谢

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41967926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档