1

一部のハードウェア デバイスのオンとオフを切り替える Python プログラムを作成しています。プログラムは Windows 上で実行する必要があります。gtk 3.0 で作成されたgtkSwitch ウィジェットを使用したいのですが、デバイスのオンとオフを切り替える必要があることはすぐにわかりますが、残念ながら gtk3 は Python 用の Windows に適切に移植されていません。gtk3 でプログラムを作成せずに gtk 3.0 に付属する gtkswitch を使用する方法はありますか、または Windows で gtk 3.0 の python バインディングを使用する方法を知っている人はいますか?

どうもありがとう!

ダーク・ブーンザジャー

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
    @作者: シェレキシ
    @ライセンス: LGPLv3+
    @見る:
    '''

    gtk、gobject のインポート

    試してください: i18n をインポート
    例外: from gettext import gettext as _


    クラス SwitchButton(gtk.Table):
        __gtype_name__ = 'スイッチボタン'
        __gsignals__ = {
            'トグル': (gobject.SIGNAL_RUN_LAST, None, ()),
        }
        def __init__(自己):
            gtk.Table.__init__(自己)
            self.label = _("ON\tOFF")
            self.tbutton = gtk.ToggleButton()
            self.tbutton.set_label(self.label)
            self.cbutton = gtk.Button()
            self.cbutton.set_sensitive(真)
            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('トグル', self.do_switch)
            self.cbutton.connect('clicked', lambda *args: self.clicked)
            #self.connect('realize', self.do_switch)
            self.set_active(False)
            self.show_all()
            合格

        def トグル (自己、*引数):
            self.clicked() を返す

        def clicked(self, *args):
            self.tbutton.clicked() を返す

        def set_inconsistent (自己、設定):
            return self.tbutton(設定)

        def set_active (自己、is_active):
            return gobject.idle_add(self.tbutton.set_active, not is_active)

        デフォルト get_active (自己):
            self.tbutton.get_active() を返さない

        def do_switch(self, *args):
            return gobject.idle_add(self._do_switch, *args)

        def _do_switch(self, *args):
            t = 自己
            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]       
            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.set_title('PyGtk2 SwitchButton')
        オプション = [
                ['Connect:', False],
                ['自動接続: ', True],
                ['自動プロキシ: ', True],
        ]
        vbox = gtk.VBox()
        vbox.set_spacing(5)
        デフ foo(*args):
            引数を出力
        オプションの k、v の場合:
            s = スイッチボタン()
            s.set_active(v)
            s.connect('トグル', 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 に答える