如何更改gtk.Assistant上的内置按钮标签?

时间:2013-03-29 21:41:11

标签: python pygtk wizard

我想将gtk.Assistant的“应用”按钮的标签更改为“开始”。我在gtk.Button实例中找不到相应的Assistant小部件。

以下是两页Assistant的基本代码:

import gtk

a = gtk.Assistant()

page = gtk.CheckButton("Something optional")
a.append_page(page)
a.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT)
a.set_page_title(page, "Make decisions")
a.set_page_complete(page, True)

page = gtk.Label("Alright, let's build some foo.")
a.append_page(page)
a.set_page_type(page, gtk.ASSISTANT_PAGE_CONFIRM)
a.set_page_title(page, "Confirm")
a.set_page_complete(page, True)

a.connect('delete-event', gtk.main_quit)
a.connect('close', gtk.main_quit)
a.show_all()

gtk.main()

在最后一页上,您会看到“应用”按钮。我想将该文本更改为“开始”。

gtk.Assistant.children().get_children()会返回页面小部件列表。

gtk.Assistant.get_child()返回None。

gtk.Assistant.get_action_area()不是一种方法。

以下是文档的链接:http://www.pygtk.org/docs/pygtk/class-gtkassistant.html

如何找到我感兴趣的gtk.Button

2 个答案:

答案 0 :(得分:4)

我在尝试使用变通方法时设法找到了解决方案。

gtk.Assistant会使用返回页面列表的内容覆盖gtk.Container.get_children()方法,但它实际上仍然是gtk.HBox()的父级,其中包含“下一步”按钮,应用','取消'等

方法gtk.Assistant.add_action_widget()将小部件添加到所谓的“操作区域”。事实证明这是包含相关按钮的HBox。以下函数将生成对HBox

的引用
def get_buttons_hbox(assistant):
    # temporarily add a widget to the action area and get its parent
    label = gtk.Label('')
    assistant.add_action_widget(label)
    hbox = label.get_parent()
    hbox.remove(label)
    return hbox

然后使用get_buttons_hbox(a).get_children()检索按钮。

for child in get_buttons_hbox(a).get_children():
    print child.get_label()

打印:

gtk-goto-last
gtk-go-back
gtk-go-forward
gtk-apply
gtk-cancel
gtk-close

因此,以下代码解决了问题(使用上面定义的get_buttons_hbox()):

for child in get_buttons_hbox(a).get_children():
    label = child.get_label()
    if label == 'gtk-apply':
        child.set_label('Start')

答案 1 :(得分:3)

我不确定pygtk是否可行。如果你用python切换到GObject Introspection,你可以设置一个完全自定义的动作区域。来自Gtk3 GtkAssistant文档:

  

如果您的案例不符合GtkAssistants的方式   处理按钮,您可以使用GTK_ASSISTANT_PAGE_CUSTOM页面类型   并自己处理按钮。

  

GTK_ASSISTANT_PAGE_CUSTOM 用于其他页面类型不是   适当。没有按钮会显示,应用程序必须添加   它自己的按钮通过gtk_assistant_add_action_widget()。