我在Genie中找不到关于"Gtk.Application“的信息或例子。
在Genie中使用Gtk.Application类的正确方法是什么?
日安,谢谢
编辑:我不知道这是否是最好的方法,但我的代码如下:
// 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)发布于 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()功能是:
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,可以使用像双脚这样的工具来查看应用程序出现在会话总线上,以及再次运行应用程序时会发生什么(需要刷新视图)。
是时候编写一些代码了:
// 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显式化。
发布于 2017-02-01 17:01:50
我还在进步。
我用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的例子。
谢谢
https://stackoverflow.com/questions/41967926
复制相似问题