【问题标题】:PyGTK: access buttons in gtk.MessageDialog?PyGTK:gtk.MessageDialog 中的访问按钮?
【发布时间】:2011-11-26 19:04:14
【问题描述】:

我有一个在 PyGTK 中使用 gtk.MessageDialog 创建提示的函数。我怎样才能访问预定义的按钮?或者我需要手动构建一个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

【问题讨论】:

    标签: python pygtk gtk2


    【解决方案1】:

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

      【讨论】:

        【解决方案3】:

        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)>]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-02
          • 1970-01-01
          • 2020-10-30
          相关资源
          最近更新 更多