При нажатии невыбранной кнопки в группе нажатая кнопка получает сигнал «переключено», как и ранее выбранная кнопка. Внутри «переключенного» обработчика, gtk_toggle_button_get_active () может быть использован для определения, была ли кнопка выбрана или отменена.
Простой пример:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Example")
self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.box_area = Gtk.Box(margin=18)
self.label = Gtk.Label(label="Gtk.Box area")
self.box_area.add(self.label)
self.box_area.set_sensitive(False)
self.radio_button_1 = Gtk.RadioButton.new_with_label(None, "Deactive")
self.radio_button_2 = Gtk.RadioButton.new_with_label_from_widget(self.radio_button_1, "Active")
self.radio_button_1.connect("toggled", self.on_radio_button_1_toggled)
self.main_box.add(self.box_area)
self.main_box.add(self.radio_button_1)
self.main_box.add(self.radio_button_2)
self.add(self.main_box)
def on_radio_button_1_toggled(self, widget):
if self.radio_button_1.get_active() == True:
self.box_area.set_sensitive(False)
else:
self.box_area.set_sensitive(True)
win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
Тот же эффект может быть получается проще, связывая свойства объектов:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Example")
self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.box_area = Gtk.Box(margin=18)
self.label = Gtk.Label(label="Gtk.Box area")
self.box_area.add(self.label)
self.box_area.set_sensitive(False)
self.radio_button_1 = Gtk.RadioButton.new_with_label(None, "Deactive")
self.radio_button_2 = Gtk.RadioButton.new_with_label_from_widget(self.radio_button_1, "Active")
self.radio_button_1.bind_property("active", self.box_area, "sensitive", GObject.BindingFlags.INVERT_BOOLEAN)
self.main_box.add(self.box_area)
self.main_box.add(self.radio_button_1)
self.main_box.add(self.radio_button_2)
self.add(self.main_box)
win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()