2

我想将 a 的“应用”按钮的标签更改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()返回无。

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

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

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

4

2 回答 2

4

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

gtk.Assistant用返回页面列表的东西覆盖该gtk.Container.get_children()方法,但它实际上仍然是 a 的父级,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')
于 2013-04-09T00:13:12.063 回答
3

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

如果您的情况不太适合 GtkAssistants 处理按钮的方式,您可以使用 GTK_ASSISTANT_PAGE_CUSTOM 页面类型并自己处理按钮。

GTK_ASSISTANT_PAGE_CUSTOM当其他页面类型不合适时使用。不会显示任何按钮,应用程序必须通过 gtk_assistant_add_action_widget() 添加自己的按钮。

于 2013-04-05T11:22:58.810 回答