今まで PyGI で散々ウソを書いていた。
#!/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 は無理なので素直に自前コネクトを…
いや、コレも手段を知らないだけかも。
自前コネクトでも動くのでお好みで、ということで。
#!/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 に変わると思うけど。