请看我的代码
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
@作者:Shellexy
@许可证:LGPLv3+
@看:
'''
导入 gtk、gobject
尝试:导入 i18n
除外:从 gettext 导入 gettext as _
类开关按钮(gtk.Table):
__gtype_name__ = '开关按钮'
__gsignals__ = {
“切换”:(gobject.SIGNAL_RUN_LAST,无,()),
}
def __init__(self):
gtk.Table.__init__(self)
self.label = _("ON\tOFF")
self.tbutton = gtk.ToggleButton()
self.tbutton.set_label(self.label)
self.cbutton = gtk.Button()
self.cbutton.set_sensitive(True)
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('toggled', self.do_switch)
self.cbutton.connect('clicked', lambda *args: self.clicked)
#self.connect('实现', self.do_switch)
self.set_active(False)
self.show_all()
经过
def 切换(自我,* args):
返回 self.clicked()
默认点击(自我,* args):
返回 self.tbutton.clicked()
def set_inconsistent(自我,设置):
返回self.tbutton(设置)
def set_active(self, is_active):
返回 gobject.idle_add(self.tbutton.set_active,不是 is_active)
def get_active(self):
返回不是 self.tbutton.get_active()
def do_switch(self, *args):
返回 gobject.idle_add(self._do_switch, *args)
def _do_switch(self, *args):
t = 自我
tb = self.tbutton
b = self.c按钮
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()
window.set_title('PyGtk2 SwitchButton')
选项= [
['连接:',假],
['自动连接:',真],
['自动代理:',真],
]
vbox = gtk.VBox()
vbox.set_spacing(5)
def foo(*args):
打印参数
对于选项中的 k、v:
s = 开关按钮()
s.set_active(v)
s.connect('toggled', 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__":
主要的()