在窗口中我有一個Gtk.Frame
與其中的圖像。現在我需要在點擊Gtk.Frame
時顯示一條消息。這是我的代碼。按鈕事件和Gtk.Frame
格萊德XML:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Clique para imprimir</property>
<property name="halign">start</property>
<property name="valign">start</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<signal name="button-press-event" handler="onFrameClicked" swapped="no"/>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<signal name="button-press-event" handler="onFrameClicked" swapped="no"/>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-home</property>
<signal name="button-press-event" handler="onFrameClicked" swapped="no"/>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">frame1</property>
<signal name="button-press-event" handler="onFrameClicked" swapped="no"/>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry1">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Python代碼:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
def on_frame_clicked(widget, event):
print('Clicked!')
builder = Gtk.Builder.new()
builder.add_from_file('frame_event.glade')
window = builder.get_object('window1')
handlers = {'onFrameClicked': on_frame_clicked}
builder.connect_signals(handlers)
window.show_all()
Gtk.main()
但是,當我點擊Gtk.Frame
沒有任何反應。我也嘗試在image
和frame
的label
中使用相同的處理程序。仍然不起作用。 我需要捕獲雙擊事件,但我知道起點是button-press-event
。
我在做什麼錯?
你想在框架上點擊什麼? – andlabs
@andlabs 它可以是任何東西,它可以是一個簡單的「打印」。這只是一個測試。 我意識到函數'on_frame_clicked'沒有被調用。 –