我正在创建一个 python 程序来打开和关闭一些硬件设备。该程序必须在 Windows 上运行。我真的很想使用在 gtk 3.0 中创建的gtkSwitch 小部件,因为很明显您希望打开或关闭设备,但不幸的是 gtk3 尚未正确移植到 windows for python。那么有什么方法可以使用 gtk 3.0 附带的 gtkswitch 而不必在 gtk3 中编写程序,或者有人知道在 windows 上使用 python 绑定 gtk 3.0 的方法吗?
多谢!
德克·邦扎耶
我正在创建一个 python 程序来打开和关闭一些硬件设备。该程序必须在 Windows 上运行。我真的很想使用在 gtk 3.0 中创建的gtkSwitch 小部件,因为很明显您希望打开或关闭设备,但不幸的是 gtk3 尚未正确移植到 windows for python。那么有什么方法可以使用 gtk 3.0 附带的 gtkswitch 而不必在 gtk3 中编写程序,或者有人知道在 windows 上使用 python 绑定 gtk 3.0 的方法吗?
多谢!
德克·邦扎耶
请看我的代码
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__": 主要的()