PyGTK: кнопки доступа в gtk.MessageDialog? - PullRequest
2 голосов
/ 26 ноября 2011

У меня есть функция, которая создает приглашения, используя 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 ]

4 голосов
/ 26 августа 2013

Вы можете использовать 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 голосов
/ 11 февраля 2014

Начиная с версии 2.22 вы можете использовать метод get_widget_for_response (). Например:

cancelButton = dialog.get_widget_for_response(response_id=gtk.RESPONSE_CANCEL)
2 голосов
/ 27 ноября 2011

gtk.MessageDialog является подклассом gtk.Dialog. gtk.Dialog объекты хранят свои кнопки в gtk.HBox под атрибутом action_area.

В коде:

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