以下是我的代码,我在其中使用两个单选按钮来激活和停用Gtk.Box类型区域。我面临的问题是,它只能使用一次,即一旦我激活了Gtk.Box,现在就无法再次停用。
def on_toggling_hash_tab_radio_button_1(self, widget):
self.hash_tab_hbox.set_sensitive(False)
def on_toggling_hash_tab_radio_button_2(self, widget):
self.hash_tab_hbox.set_sensitive(True)
我进行了一些搜索,并了解了Gtk.main()循环,但我对此不太了解。我该如何做到这一点,并且应该对主循环有一点了解。
谢谢
〜Shantanu Kumar
当单击组中未选择的按钮时,与先前选择的按钮一样,被单击的按钮会收到“切换”信号。在“切换”处理程序内,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()