PyGTK:如何访问gtk.MessageDialog中的按钮?
我有一个函数,它使用gtk.MessageDialog在PyGTK中创建提示框。我想知道怎么才能访问那些预定义的按钮?还是说我需要手动构建一个gtk.Dialog?我其实不太想这样,因为MessageDialog本来就是个方便的功能。
这个函数:
def gtkPrompt(self, name):
# Create new GTK dialog with all the fixings
prompt = gtk.MessageDialog(None, 0, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, name)
# Set title of dialog
prompt.set_title("Prompt")
# Create and add entry box to dialog
entry = gtk.Entry()
prompt.vbox.add(entry)
# Show all widgets in prompt
prompt.show_all()
# Run dialog until user clicks OK or Cancel
if prompt.run() == gtk.RESPONSE_CANCEL:
# User cancelled dialog
rval = False
else:
# User clicked OK, grab text from entry box
rval = entry.get_text()
# Destory prompt
prompt.destroy()
# Give the good (or bad) news
return rval
3 个回答
3
你可以使用 get_children() 来找到“确定”按钮:
def yesNoDialog(window, message, default=False):
dialog=gtk.MessageDialog(window, gtk.DIALOG_MODAL |
gtk.DIALOG_DESTROY_WITH_PARENT,
gtk.MESSAGE_QUESTION,
gtk.BUTTONS_YES_NO, message)
if default:
h_button_box=dialog.vbox.get_children()[1]
yes_button=h_button_box.get_children()[0]
yes_button.grab_default()
response=dialog.run()
dialog.destroy()
if response==gtk.RESPONSE_YES:
return True
else:
return False
4
从版本2.22开始,你可以使用get_widget_for_response()这个方法。比如说:
cancelButton = dialog.get_widget_for_response(response_id=gtk.RESPONSE_CANCEL)
2
gtk.MessageDialog
是 gtk.Dialog
的一个子类。简单来说,gtk.Dialog
这个对象会把它的按钮放在一个叫 action_area
的地方,这个地方是一个 gtk.HBox
。
代码示例:
> prompt.action_area.get_children()
[<gtk.Button object at 0x18c0aa0 (GtkButton at 0x130e990)>, <gtk.Button object at 0x18c0af0 (GtkButton at 0x130e8d0)>]