# ButtonWidget

class `praw.models.``ButtonWidget`(reddit, _data)

  Class to represent a widget containing one or more buttons.

  Find an existing one:

      button_widget = None
      widgets = reddit.subreddit("redditdev").widgets
      for widget in widgets.sidebar:
          if isinstance(widget, praw.models.ButtonWidget):
              button_widget = widget
              break

      for button in button_widget:
          print(button.text, button.url)

  Create one (requires proper moderator permissions):

      widgets = reddit.subreddit("redditdev").widgets
      buttons = [
          {
              "kind": "text",
              "text": "View source",
              "url": 'https://github.com/praw-dev/praw',
              "color": "#FF0000",
              "textColor": "#00FF00",
              "fillColor": "#0000FF",
              "hoverState": {
                  "kind": "text",
                  "text": "ecruos weiV",
                  "color": "#000000",
                  "textColor": "#FFFFFF",
                  "fillColor": "#0000FF",
              },
          },
          {
              "kind": "text",
              "text": "View documentation",
              "url": 'https://praw.readthedocs.io',
              "color": "#FFFFFF",
              "textColor": "#FFFF00",
              "fillColor": "#0000FF",
          },
      ]
      styles = {"backgroundColor": "#FFFF66", "headerColor": "#3333EE"}
      button_widget = widgets.mod.add_button_widget(
          "Things to click", "Click some of these *cool* links!", buttons, styles
      )

  For more information on creation, see `add_button_widget()`.

  Update one (requires proper moderator permissions):

      new_styles = {"backgroundColor": "#FFFFFF", "headerColor": "#FF9900"}
      button_widget = button_widget.mod.update(shortName="My fav buttons", styles=new_styles)

  Delete one (requires proper moderator permissions):

      button_widget.mod.delete()

  Typical Attributes

  This table describes attributes that typically belong to objects of this class. Since attributes are dynamically provided (see Determine Available Attributes of an Object), there is not a guarantee that these attributes will always be present, nor is this list necessarily complete.

  Attribute | Description
  --- | ---
  `buttons` | A `list` of `Button`s. These can also be accessed just by iterating over the `ButtonWidget` (e.g. `for button in button_widget`).
  `description` | The description, in Markdown.
  `description_html` | The description, in HTML.
  `id` | The widget ID.
  `kind` | The widget kind (always `"button"`).
  `shortName` | The short name of the widget.
  `styles` | A `dict` with the keys `"backgroundColor"` and `"headerColor"`.
  `subreddit` | The `Subreddit` the button widget belongs to.

  `__contains__`(item: Any) → bool

    Test if item exists in the list.

  `__getitem__`(index: int) → Any

    Return the item at position index in the list.

  `__init__`(reddit, _data)

    Initialize an instance of the class.

  `__iter__`() → Iterator[Any]

    Return an iterator to the list.

  `__len__`() → int

    Return the number of items in the list.

  `mod`()

    Get an instance of `WidgetModeration` for this widget.

    Note

    Using any of the methods of `WidgetModeration` will likely make the data in the `SubredditWidgets` that this widget belongs to outdated. To remedy this, call `refresh()`.

  classmethod `parse`(data: Dict[str, Any], reddit: Reddit) → Any

    Return an instance of `cls` from `data`.

    Parameters

      - data – The structured data.

      - reddit – An instance of `Reddit`.