Python windows上pygtk 2中的GTK开关

Python windows上pygtk 2中的GTK开关,python,pygtk,gtk3,gtk2,Python,Pygtk,Gtk3,Gtk2,我正在创建一个python程序来打开和关闭一些硬件设备。该程序必须在windows上运行。我真的很想使用gtk3.0中创建的,因为很明显,您希望打开或关闭设备,但遗憾的是gtk3没有正确地移植到windows for python。那么,有没有任何方法可以使用gtk3.0附带的gtkswitch而不必用gtk3编写程序,或者有人知道在windows上使用gtk3.0的python绑定的方法 非常感谢 德克·邦扎杰请查看我的代码 我使用gtk.ToggleButton来模拟gtk.Switch按

我正在创建一个python程序来打开和关闭一些硬件设备。该程序必须在windows上运行。我真的很想使用gtk3.0中创建的,因为很明显,您希望打开或关闭设备,但遗憾的是gtk3没有正确地移植到windows for python。那么,有没有任何方法可以使用gtk3.0附带的gtkswitch而不必用gtk3编写程序,或者有人知道在windows上使用gtk3.0的python绑定的方法

非常感谢

德克·邦扎杰

请查看我的代码

我使用gtk.ToggleButton来模拟gtk.Switch按钮

gtkswitchbutton.py

#!/usr/bin/python # -*- coding: UTF-8 -*- # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: '''GtkSwitch for PyGtk2 @author: Shellexy @license: LGPLv3+ @see: ''' import gtk, gobject try: import i18n except: from gettext import gettext as _ class SwitchButton(gtk.Table): __gtype_name__ = 'SwitchButton' __gsignals__ = { 'toggled': (gobject.SIGNAL_RUN_LAST, None, ()), } 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('realize', self.do_switch) self.set_active(False) self.show_all() pass def toggled(self, *args): return self.clicked() def clicked(self, *args): return self.tbutton.clicked() def set_inconsistent(self, setting): return self.tbutton(setting) def set_active(self, is_active): return gobject.idle_add(self.tbutton.set_active, not is_active) def get_active(self): return not self.tbutton.get_active() def do_switch(self, *args): return gobject.idle_add(self._do_switch, *args) def _do_switch(self, *args): t = self 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] if self.get_children(): t.remove(b); t.remove(tb) pass if 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] pass else: 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] pass tb.set_style(bs) l.set_style(ls) tb.do_focus(tb, 1) self.emit('toggled') pass def main(): window = gtk.Window() window.set_title('PyGtk2 SwitchButton') options = [ ['Connect: ', False], ['Auto Connect: ', True], ['Auto Proxy: ', True], ] vbox = gtk.VBox() vbox.set_spacing(5) def foo(*args): print args for k, v in options: s = SwitchButton() s.set_active(v) s.connect('toggled', foo, k) hbox = gtk.HBox() label = gtk.Label(k) label.set_alignment(0, 0.5) hbox.pack_start(label, 1, 1, 0) hbox.pack_start(s, 0, 0, 0) vbox.pack_start(hbox, 0, 0, 0) pass window.add(vbox) window.show_all() window.connect('destroy', lambda *args: gtk.main_quit()) gtk.main() pass if __name__=="__main__": main() #!/usr/bin/python #-*-编码:UTF-8-*- #vim:set shiftwidth=4 tabstop=4 expandtab TEXTWITH=79: ''PyGtk2的GTK开关 @作者:Shellexy @许可证:LGPLv3+ @见: ''' 导入gtk,gobject 尝试:导入i18n 除外:从gettext导入gettext作为_ 类别开关按钮(gtk.表格): __gtype_name_uuu=‘开关按钮’ __G信号\uuuu={ “toggled”:(gobject.SIGNAL_RUN_LAST,None,()), } 定义初始化(自): gtk.表格_u初始_uu(自身) self.label=Uf(“ON\tOFF”) self.tbutton=gtk.ToggleButton() self.tbutton.set_标签(self.label) self.cbutton=gtk.Button() self.cbutton.set_sensitive(True) self.cbutton.set\u can\u focus(假) self.cbutton.set\u can\u默认值(False) self.attach(self.cbutton,0,2,0,1) self.attach(self.tbutton,0,4,0,1) self.tbutton.connect('toggled',self.do_开关) self.cbutton.connect('clicked',lambda*args:self.clicked) #self.connect('realize',self.do_开关) 自我设置_激活(错误) self.show_all() 通过 def切换(自,*参数): 返回self.clicked() 已单击def(自身,*参数): 返回self.tbutton.clicked() def set_不一致(自身,设置): 返回自.t按钮(设置) def set_active(自我,处于活动状态): return gobject.idle_add(self.tbutton.set_活动,未活动) def get_激活(自): 返回not self.tbutton.get_active() def do_开关(自,*参数): 返回gobject.idle\u add(self.\u do\u开关,*args) def_do_开关(自,*args): t=自我 tb=self.tbutton b=self.cbutton l=tb.get_child() l、 设置对齐(gtk.对齐填充) bs=tb.get_style().copy() ls=l.get_style().copy() bs.bg[gtk.STATE\u NORMAL]=ls.bg[gtk.STATE\u SELECTED] ls.fg[gtk.STATE\u NORMAL]=ls.text[gtk.STATE\u SELECTED] 如果self.get_children(): t、 删除(b);t、 删除(tb) 通过 如果self.get_处于活动状态(): t、 附加(b,2,4,0,1);t、 连接(tb,0,4,0,1) bs.bg[gtk.STATE\u PRELIGHT]=ls.bg[gtk.STATE\u SELECTED] ls.fg[gtk.STATE\u PRELIGHT]=ls.text[gtk.STATE\u SELECTED] 通过 其他: t、 附加(b,0,2,0,1);t、 连接(tb,0,4,0,1) bs.bg[gtk.STATE\u PRELIGHT]=ls.bg[gtk.STATE\u不敏感] ls.fg[gtk.STATE\u PRELIGHT]=ls.text[gtk.STATE\u NORMAL] 通过 tb.set_样式(bs) l、 设置样式(ls) tb.do_焦点(tb,1) self.emit('toggled') 通过 def main(): window=gtk.window() 窗口。设置标题(“PyGtk2开关按钮”) 选项=[ ['Connect:',False], [“自动连接:”,True], ['Auto Proxy:',True], ] vbox=gtk.vbox() vbox.set_间距(5) def foo(*args): 打印参数 对于选项中的k、v: s=开关按钮() s、 设置_激活(v) s、 连接('toggled',foo,k) hbox=gtk.hbox() 标签=gtk。标签(k) 标签。设置对齐(0,0.5) hbox.pack_开始(标签,1,1,0) hbox.pack_启动(s,0,0,0) vbox.pack_启动(hbox,0,0,0) 通过 添加窗口(vbox) window.show_all() connect('destroy',lambda*args:gtk.main_quit()) gtk.main() 通过 如果名称=“\uuuuu main\uuuuuuuu”: main()
而且,有pygtk3用于windows下载,但它太笨重了。