1

我正在创建一个 python 程序来打开和关闭一些硬件设备。该程序必须在 Windows 上运行。我真的很想使用在 gtk 3.0 中创建的gtkSwitch 小部件,因为很明显您希望打开或关闭设备,但不幸的是 gtk3 尚未正确移植到 windows for python。那么有什么方法可以使用 gtk 3.0 附带的 gtkswitch 而不必在 gtk3 中编写程序,或者有人知道在 windows 上使用 python 绑定 gtk 3.0 的方法吗?

多谢!

德克·邦扎耶

4

1 回答 1

-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__":
        主要的()

于 2014-06-27T10:03:06.187 回答