我不知道为什么我无法激活菜单项。我尝试连接我的函数处理程序许多 信号:"激活","激活项目","通知::活动",&# 34;选择" 即可。但没有人工作过。
我使用Glade ,我给你一个我的菜单栏(我讨厌在统一窗口管理器上,菜栏显示在窗口栏中:它应该在应用程序窗口)。
我用于信号处理程序的代码非常简单:
builder.get_object('menuitem3').connect('activate', self.useless_method)
builder.get_object('window1').show()
下面是Glade文件中的XML代码:
<object class="GtkMenuBar" id="menubar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitem2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Modifica</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitem3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Visualizza</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
为什么这不起作用?!
答案 0 :(得分:0)
您的glade文件没有任何问题。我对它进行了硬编码并且有效。但是请注意,因为'menuitem3'是一个顶级菜单,为什么要连接信号呢?也许你的连接功能?
已编辑(您的代码):
def useless_method(menuitem): <<< edited, note below
print 'I am %s' % str(menuitem) <<< note below
builder = Gtk.Builder()
builder.add_from_file('menuitem.glade')
builder.get_object('menuitem3').connect('activate', useless_method)
builder.get_object('window1').show_all()
Gtk.main()
来自'Gtk.MenuItem'的信号中的参数只需要一个参数,即指针数据。你放了三个。除非你创建一个类,否则不需要'self'。 你可以单独传递'args()',但是我选择了menuitem3来确定你传递了一个Gtk.Widget对象来打印成一个字符串。 Python仍将打印它(如果你看控制台)Gtk.MenuItem(#3)所在的内存地址。 最后,由于'menuitem3'是一个顶级菜单,第一次点击的机制是丢弃菜单(因为没有菜单,看起来它什么也没做),第二次点击,它会发出信号'激活'那就是你的功能会做点什么。所以点击两次就会触发。 很抱歉有太多解释。