windows上pygtk 2中的gtkSwitch
Posted
技术标签:
【中文标题】windows上pygtk 2中的gtkSwitch【英文标题】:gtkSwitch in pygtk 2 on windows 【发布时间】:2012-12-01 22:44:50 【问题描述】:我正在创建一个 python 程序来打开和关闭一些硬件设备。该程序必须在 Windows 上运行。我真的很想使用在 gtk 3.0 中创建的gtkSwitch widget,因为很明显您想要打开或关闭设备,但不幸的是 gtk3 尚未正确移植到 windows for python。那么有没有什么方法可以使用 gtk 3.0 自带的 gtkswitch 而不必在 gtk3 中编写程序,或者有人知道在 windows 上使用 python 绑定 gtk 3.0 的方法吗?
非常感谢!
德克·布恩扎耶
【问题讨论】:
【参考方案1】:请看我的代码
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__": 主要的()【讨论】:
还有,有pygtk3 for windows下载wiki.gnome.org/action/show/Projects/PyGObject#Binaries,但是太笨重了。以上是关于windows上pygtk 2中的gtkSwitch的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 下拖动链接到 PyGTK 应用程序?