Gtk_widget.set_sensitive()无法正常工作

问题描述 投票:-1回答:1

以下是我的代码,我在其中使用两个单选按钮来激活和停用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

python-3.x gtk3 pygtk
1个回答
0
投票

当单击组中未选择的按钮时,与先前选择的按钮一样,被单击的按钮会收到“切换”信号。在“切换”处理程序内,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()
© www.soinside.com 2019 - 2024. All rights reserved.