Y901x 0.1.2 公開しました。
こんな Windows 用のノリでやっていても良いものかと思い始めた今日この頃。
っっって…指定倍率変更の計算が間違えているのに今気がついた!
せっかくまとめて listbox クラスにしたのにセパレータサイズを足していた。
あーあ明日もごまかすために更新だ、更新が特定期間に集中する原因はコレです。
ところで。
ラジオメニューとトグルボタンは UIManager から同期させられないっぽい。
と以前書いたけどツールバーならあっさりできるようで。
#!/usr/bin/env python #-*- coding:utf-8 -*- import gtk ui_str = """<ui> <menubar name="MenuBar"> <menu action="Rep"> <menuitem action="non"/> <menuitem action="one"/> <menuitem action="all"/> <menuitem action="rdm"/> </menu> </menubar> <toolbar name="Toolbar"> <toolitem action="one"/> <toolitem action="all"/> <toolitem action="rdm"/> </toolbar> </ui>""" class BtnBox(gtk.Window): def __init__(self): gtk.Window.__init__(self) # # GtkUIManager 作成 self.uimanager = gtk.UIManager() # # GtkActionGroup 作成 self.actiongroup = gtk.ActionGroup("sasakimamenu") # # GtkAccelGroup を得てウインドウに突っ込む # 何もグループを作らなくてもコレやらないと後のアクセラレータ指定が効かない accelgroup = self.uimanager.get_accel_group() self.add_accel_group(accelgroup) # # GtkActionEntry を作成して突っ込む # 得にグループにしないものはココでまとめて作成 # name, stock_id, label, accelerator, tooltip, callback self.ac0 = [("Rep", None, "リピート(_R)")] self.actiongroup.add_actions(self.ac0) # # GtkRadioActionEntry の List を作成 # name, stock_id, label, accelerator, tooltip, value self.ac1 = [("non", None, "無し", "0", "無し", 0), ("one", None, "シングル", "1", "シングル", 1), ("all", None, "オール", "2", "オール", 2), ("rdm", None, "ランダム", "3", "ランダム", 3) ] # GtkRadioAction を突っ込む # entries, value=0, on_change=None, user_data=None self.actiongroup.add_radio_actions(self.ac1, 0, self.on_loop_change) # # GtkUIManager の更新 self.uimanager.insert_action_group(self.actiongroup, 0) self.uimanager.add_ui_from_string(ui_str) self.uimanager.ensure_update() # menubar を抜き出す menubar = self.uimanager.get_widget("/MenuBar") # toolbar を抜き出す toolbar = self.uimanager.get_widget('/Toolbar') # pack vbox = gtk.VBox() vbox.pack_start(menubar, False) vbox.pack_start(toolbar, False,False) self.add(vbox) self.connect("delete-event", gtk.main_quit) self.resize(320, 150) self.show_all() self.val = 0 def on_loop_change(self, action, current): # コレは無理だった num = action.get_current_value() if num == self.val: action.set_current_value(0) else: self.val = num if __name__ == "__main__": w = BtnBox() gtk.main()
得に何をするわけでもなく action を共通にすれば同期してくれるわ。
だけどアクティブなボタンを再度押すとオフにするといった処理は無理か。
ボタンオブジェクトを抜いて clicked シグナルを処理すればよさげだけど。
コレ上手く使えないかな?いまここ。