今まで PyGI で散々ウソを書いていた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/usr/bin/env python3 from gi.repository import Gtk, Gdk class Win(Gtk.Window): """ Auto-connected by the prefix of do_ """ def __init__( self ): Gtk.Window.__init__( self ) self .set_events(Gdk.EventMask.BUTTON_PRESS_MASK) #self.connect("button-press-event", self.on_button_press_event) #self.connect("delete-event", Gtk.main_quit) self .show_all() def do_delete_event( self , event): Gtk.main_quit() def do_button_press_event( self , event): self .begin_move_drag( event.button, event.x_root, event.y_root, event.time) Win() Gtk.main() |
まさかこんな方法があったなんて、、、、、
ハイフンをアンダーバーに置換して do_ のプリフィクスだけで自動コネクト。
パッキングされた Widget は無理なので素直に自前コネクトを…
いや、コレも手段を知らないだけかも。
自前コネクトでも動くのでお好みで、ということで。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #!/usr/bin/env python3 import sys from gi.repository import Gtk, Gio """ ApplicationMenu does not apply in GtkWindow """ #class Win(Gtk.ApplicationWindow): class Win(Gtk.Window): def __init__( self , app): #Gtk.ApplicationWindow.__init__(self, application=app) Gtk.Window.__init__( self , application = app) self .show_all() class App(Gtk.Application): def __init__( self ): Gtk.Application.__init__( self ) def do_activate( self ): self .window = Win( self ) self .window.present() def do_startup( self ): Gtk.Application.do_startup( self ) # AppMenu menu = Gio.Menu() menu.append( "New" , "app.new" ) menu.append( "Quit" , "app.quit" ) self .set_app_menu(menu) # option "new" new_action = Gio.SimpleAction.new( "new" , None ) new_action.connect( "activate" , self .new_cb) self .add_action(new_action) # option "quit" quit_action = Gio.SimpleAction.new( "quit" , None ) quit_action.connect( "activate" , self .quit_cb) self .add_action(quit_action) def new_cb( self , action, parameter): print ( "New" ) def quit_cb( self , action, parameter): self .quit() if __name__ = = "__main__" : app = App() app.run(sys.argv) |
更に覚書ページでは GtkWindow を add_window していたけど
GtkApplicationWindow にしないとアプリケーションメニューが出せない。
自アプリに使おうとして適用されなくて初めて気が付いた。
application property は GtkWindow にあるのにさ。
実際に何か作らないと気が付かないことって多いよなぁ。
それにしても。
アプリケーションメニューは Lubuntu 等ではタイトルバーの下になる。
LXDE が Qt に移行する最大の原因はコレなのかな。
どうせ Qt もタッチパネル向け UI に変わると思うけど。