PyGtk3,ToggleButton," toggled-or-untoggled"事件

时间:2017-04-16 10:04:57

标签: python pygtk

我知道"切换或未支持" 事件不存在,但我需要使用这样的事件。当按钮是"切换"是否有事件要做任务?并且"没有眼睛"。我不想使用"点击"事件因为ToggleButton可以在没有单击的情况下切换或取消切换 感谢

例如

def foo(obj):
    if obj.get_active():
        print("toggled")
    else:
        print("untoggled")

mybtn = gtk.ToggleButton()
mybtn.connect("toggled-or-untoggled", foo)

2 个答案:

答案 0 :(得分:2)

根据the docs -

  

当按钮状态改变时,“切换”信号为   射出。

因此,理想情况下,mybtn.connect("toggled", foo)应该有效。

答案 1 :(得分:1)

这是一个简短的GTK2 + / PyGTK演示;如果需要,它应该很容易适应GTK3。

GUI包含一个ToggleButton和一个普通的Button。 ToggleButton的回调只是在用户点击它或其他调用其set_active方法的代码时切换按钮的状态。普通按钮在单击时会打印一条消息,它也会切换ToggleButton。

#!/usr/bin/env python2

from __future__ import print_function
import pygtk
pygtk.require('2.0')
import gtk

class Test(object):
    def __init__(self):
        win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        win.connect("destroy", lambda w: gtk.main_quit())

        box = gtk.HBox()
        box.show()
        win.add(box)

        self.togglebutton = button = gtk.ToggleButton('toggle')
        button.connect("toggled", self.togglebutton_cb)
        box.pack_start(button, expand=True, fill=False)
        button.show()

        button = gtk.Button('plain')
        button.connect("clicked", self.button_cb)
        box.pack_start(button, expand=True, fill=True)
        button.show()

        win.show()
        gtk.main()

    def button_cb(self, widget):
        s = "%s button pressed" % widget.get_label()
        print(s)
        print('Toggling...')
        tb = self.togglebutton
        state = tb.get_active()
        tb.set_active(not state)

    def togglebutton_cb(self, widget):
        state = widget.get_active()
        s = "%s button toggled to %s" % (widget.get_label(), ("off", "on")[state])
        print(s)

Test()

典型输出

toggle button toggled to on
toggle button toggled to off
plain button pressed
Toggling...
toggle button toggled to on
plain button pressed
Toggling...
toggle button toggled to off
plain button pressed
Toggling...
toggle button toggled to on
toggle button toggled to off