2011-11-26 51 views
2

我有一個函數可以在PyGTK中使用gtk.MessageDialog創建提示。我怎樣才能訪問預定義的按鈕?或者我需要手動構建一個gtk.Dialog?我寧願不,看到MessageDialog是一個方便的功能。PyGTK:gtk.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 

回答

2

gtk.MessageDialoggtk.Dialog一個子類。 gtk.Dialog對象將其按鈕存儲在gtk.HBoxaction_area屬性下。

在代碼:

> prompt.action_area.get_children() 
[<gtk.Button object at 0x18c0aa0 (GtkButton at 0x130e990)>, <gtk.Button object at 0x18c0af0 (GtkButton at 0x130e8d0)>] 
4

您可以使用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 
2

由於2.22你可以使用get_widget_for_response()方法。例如:

cancelButton = dialog.get_widget_for_response(response_id=gtk.RESPONSE_CANCEL)