我试过你的方法,如果你将信号连接到按钮,你将不会得到你正在搜索的行为。
为了达到这个目的,您需要将信号连接到扩展器,比如button-press-event
,并返回True以避免信号传播。
这样做,您将能够避免扩展器扩展并最终控制扩展时的情况。
格莱德文件(expand.ui):
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkExpander" id="expander1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Action 1</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Action 2</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Action 3</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkButton" id="menub">
<property name="label" translatable="yes">Menu</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage">
<property name="width_request">400</property>
<property name="height_request">300</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
一些逻辑
Python代码:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
def onMenuButtonPress(self, widget):
#uncomment below to recreate the original behavior
#expander.set_expanded(not expander.get_expanded())
return True
builder = Gtk.Builder()
builder.add_from_file("expander.ui")
window = builder.get_object("window1")
menu = builder.get_object("menub")
expander = builder.get_object("expander1")
expander.connect("button-press-event", onMenuButtonPress)
window.connect ("destroy", Gtk.main_quit)
window.show_all()
Gtk.main()
如果您运行的代码,你会看到,按下按钮不会扩大扩展。按键虽然(需要处理按键事件等)
取消注释代码上指示的行以重新创建内在行为。
谢谢,我想它会需要类似的东西。没有测试过,但似乎是这样。实际上我已经离开了扩展器,因为它实际上并没有提供额外的功能,除了扩展功能外,我必须处理其他一些视觉原因(我想在应用程序未使用时自动收缩,所以它将根据计时器“延长”)。再次感谢! – AbstractDissonance
只是为了重申一个带有“True”和“False”值的条件返回将具有相同的行为。谢谢。祝你好运。 –