私のコードを見てください
https://gist.github.com/shellexy/2f86cfa4a0448f7125e8
gtk.ToggleButton を使用して gtk.Switch ボタンをシミュレートします。
http://i.stack.imgur.com/fLvq7.png
gtkswitchbutton.py
#!/usr/bin/python
# -*- コーディング: UTF-8 -*-
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
'''PyGtk2 の GtkSwitch
@作者: シェレキシ
@ライセンス: LGPLv3+
@見る:
'''
gtk、gobject のインポート
試してください: i18n をインポート
例外: from gettext import gettext as _
クラス SwitchButton(gtk.Table):
__gtype_name__ = 'スイッチボタン'
__gsignals__ = {
'トグル': (gobject.SIGNAL_RUN_LAST, None, ()),
}
def __init__(自己):
gtk.Table.__init__(自己)
self.label = _("ON\tOFF")
self.tbutton = gtk.ToggleButton()
self.tbutton.set_label(self.label)
self.cbutton = gtk.Button()
self.cbutton.set_sensitive(真)
self.cbutton.set_can_focus(False)
self.cbutton.set_can_default(False)
self.attach(self.cbutton, 0, 2, 0, 1)
self.attach(self.tbutton, 0, 4, 0, 1)
self.tbutton.connect('トグル', self.do_switch)
self.cbutton.connect('clicked', lambda *args: self.clicked)
#self.connect('realize', self.do_switch)
self.set_active(False)
self.show_all()
合格
def トグル (自己、*引数):
self.clicked() を返す
def clicked(self, *args):
self.tbutton.clicked() を返す
def set_inconsistent (自己、設定):
return self.tbutton(設定)
def set_active (自己、is_active):
return gobject.idle_add(self.tbutton.set_active, not is_active)
デフォルト get_active (自己):
self.tbutton.get_active() を返さない
def do_switch(self, *args):
return gobject.idle_add(self._do_switch, *args)
def _do_switch(self, *args):
t = 自己
tb = self.tbutton
b = self.cbutton
l = tb.get_child()
l.set_justify(gtk.JUSTIFY_FILL)
bs = tb.get_style().copy()
ls = l.get_style().copy()
bs.bg[gtk.STATE_NORMAL] = ls.bg[gtk.STATE_SELECTED]
ls.fg[gtk.STATE_NORMAL] = ls.text[gtk.STATE_SELECTED]
self.get_children() の場合:
t.remove(b); t.remove(tb)
合格
self.get_active() の場合:
t.attach(b, 2, 4, 0, 1) ; t.attach(tb, 0, 4, 0, 1)
bs.bg[gtk.STATE_PRELIGHT] = ls.bg[gtk.STATE_SELECTED]
ls.fg[gtk.STATE_PRELIGHT] = ls.text[gtk.STATE_SELECTED]
合格
そうしないと:
t.attach(b, 0, 2, 0, 1) ; t.attach(tb, 0, 4, 0, 1)
bs.bg[gtk.STATE_PRELIGHT] = ls.bg[gtk.STATE_INSENSITIVE]
ls.fg[gtk.STATE_PRELIGHT] = ls.text[gtk.STATE_NORMAL]
合格
tb.set_style(bs)
l.set_style(ls)
tb.do_focus(tb, 1)
self.emit('トグル')
合格
デフメイン():
ウィンドウ = gtk.ウィンドウ()
window.set_title('PyGtk2 SwitchButton')
オプション = [
['Connect:', False],
['自動接続: ', True],
['自動プロキシ: ', True],
]
vbox = gtk.VBox()
vbox.set_spacing(5)
デフ foo(*args):
引数を出力
オプションの k、v の場合:
s = スイッチボタン()
s.set_active(v)
s.connect('トグル', foo, k)
hbox = gtk.HBox()
ラベル = gtk.Label(k)
label.set_alignment(0, 0.5)
hbox.pack_start(ラベル, 1, 1, 0)
hbox.pack_start(s, 0, 0, 0)
vbox.pack_start(hbox, 0, 0, 0)
合格
window.add(vbox)
window.show_all()
window.connect('destroy', lambda *args: gtk.main_quit())
gtk.main()
合格
__name__=="__main__" の場合:
主要()