Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改gtk.Assistant上的内置按钮标签?_Python_Pygtk_Wizard - Fatal编程技术网

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

Python 如何更改gtk.Assistant上的内置按钮标签?,python,pygtk,wizard,Python,Pygtk,Wizard,我想将gtk.Assistant的“应用”按钮标签更改为“开始”。我在助手实例中找不到相应的gtk.按钮小部件 下面是两页助手的一些基本代码: 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(pag

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

下面是两页
助手的一些基本代码:

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()
不是一种方法

以下是文档的链接:


如何找到我感兴趣的
gtk.按钮

我不确定pygtk是否可以。如果使用python切换到GObject内省,则可以设置一个完全自定义的操作区域。从文件中:

如果您有一个案例不太适合GTKAsistants的方式 处理按钮,您可以使用GTK_助手_页面_自定义页面类型 自己拿按钮

GTK_助手_页面_自定义用于其他页面类型不可用时 适当的不会显示任何按钮,应用程序必须添加 通过gtk_assistant_add_action_widget()创建自己的按钮


我在试验变通办法时设法找到了解决办法

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\u buttons\u hbox(a).get\u children()
检索按钮

这张照片是:

gtk-goto-last
gtk-go-back
gtk-go-forward
gtk-apply
gtk-cancel
gtk-close
下面的代码解决了这个问题(使用上面定义的
get\u buttons\u hbox()
):


这家伙似乎和你有同样的问题:但他似乎暗示你想要的修改在C中是可能的。你在C中试过类似的东西吗?如果可能的话,您可以用C语言编写代码,然后将C代码绑定到Python,并在那里运行代码的一小部分。对不起,我想这个建议似乎有些过分,但我能想到的唯一方法是破解实际的实现本身。从python中执行此操作似乎并不容易…@eazar感谢您的建议。这太过分了,但在不改变PyGTK本身的情况下,似乎没有其他方法了。@eazar你想将你的评论作为答案发布吗?我会发布答案,但唯一的问题是我没有测试它是否真的有效。我以前从未在C中尝试过gtk。如果我今天晚些时候有时间,我会试一试,如果有效,我会发布一个答案[=不幸的是,GObject内省在Windows上还不可用,所以我无法使用此解决方案。哦,我明白了。eazar001的解决方案可以工作,但由于明显的原因,它不具有吸引力。我认为正确的/pythonic的方法是创建您自己的基于GtkWindow的复合小部件。GtkAssistant毕竟只是一个方便类,而不是一个非常好的com这是一个复杂的例子(参见“简单比复杂好,复杂比复杂好”——Python的Zen)
gtk-goto-last
gtk-go-back
gtk-go-forward
gtk-apply
gtk-cancel
gtk-close
for child in get_buttons_hbox(a).get_children():
    label = child.get_label()
    if label == 'gtk-apply':
        child.set_label('Start')