Is it possible to get widget settings in Tkinter?

Posted on

Question :

Is it possible to get widget settings in Tkinter?

It’d be awesome if I could get something like the below.

Pseudo Code:

U = widget1.SettingsGet()
Print U 

Upon printing U something like this would be returned:

widget1(background='green',foreground='grey',boarderwidth=10, relief='flat')

It would be really useful to be able to get a widgets settings. So that I can manipulate other widgets accordingly.

Answer #1:

If you know what settings you need, you can just use the cget method to get values e.g.

from Tkinter import *

root = Tk()

w = Label(root, text="Hello, world!")
w.pack()
print w.cget('text')
root.mainloop()

It will print

Hello, world!

If you want to know all the available options, widget.config contains the config and from that if you wish you can create all or a subset of settings which you may need e.g.

import pprint
from Tkinter import *

root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
pprint.pprint(w.config())
root.mainloop()

Output:

{'activebackground': ('activebackground',
                      'activeBackground',
                      'Foreground',
                      <border object at 00C665D0>,
                      'SystemButtonFace'),
 'activeforeground': ('activeforeground',
                      'activeForeground',
                      'Background',
                      <color object at 00C66C48>,
                      'SystemButtonText'),
 'anchor': ('anchor',
            'anchor',
            'Anchor',
            <index object at 00C66588>,
            'center'),
 'background': ('background',
                'background',
                'Background',
                <border object at 0119A3E0>,
                'SystemButtonFace'),
 'bd': ('bd', '-borderwidth'),
 'bg': ('bg', '-background'),
 'bitmap': ('bitmap', 'bitmap', 'Bitmap', '', ''),
 'borderwidth': ('borderwidth',
                 'borderWidth',
                 'BorderWidth',
                 <pixel object at 0119A0F8>,
                 <pixel object at 0119A0F8>),
 'compound': ('compound',
              'compound',
              'Compound',
              <index object at 011A90D8>,
              'none'),
 'cursor': ('cursor', 'cursor', 'Cursor', '', ''),
 'disabledforeground': ('disabledforeground',
                        'disabledForeground',
                        'DisabledForeground',
                        <color object at 011A5DB0>,
                        'SystemDisabledText'),
 'fg': ('fg', '-foreground'),
 'font': ('font',
          'font',
          'Font',
          <font object at 011A5E40>,
          (('MS', 'Sans', 'Serif'), '8')),
 'foreground': ('foreground',
                'foreground',
                'Foreground',
                <color object at 011A5F48>,
                'SystemButtonText'),
 'height': ('height', 'height', 'Height', 0, 0),
 'highlightbackground': ('highlightbackground',
                         'highlightBackground',
                         'HighlightBackground',
                         <border object at 011A5EE8>,
                         'SystemButtonFace'),
 'highlightcolor': ('highlightcolor',
                    'highlightColor',
                    'HighlightColor',
                    <color object at 011A5F78>,
                    'SystemWindowFrame'),
 'highlightthickness': ('highlightthickness',
                        'highlightThickness',
                        'HighlightThickness',
                        <pixel object at 011A5FA8>,
                        <pixel object at 011A5FA8>),
 'image': ('image', 'image', 'Image', '', ''),
 'justify': ('justify',
             'justify',
             'Justify',
             <index object at 011A5F30>,
             'center'),
 'padx': ('padx',
          'padX',
          'Pad',
          <pixel object at 011A5FC0>,
          <pixel object at 011A5FC0>),
 'pady': ('pady',
          'padY',
          'Pad',
          <pixel object at 011A5FD8>,
          <pixel object at 011A5FD8>),
 'relief': ('relief', 'relief', 'Relief', <index object at 011A5FF0>, 'flat'),
 'state': ('state', 'state', 'State', <index object at 011A5EA0>, 'normal'),
 'takefocus': ('takefocus', 'takeFocus', 'TakeFocus', '0', '0'),
 'text': ('text', 'text', 'Text', '', ('Hello,', 'world!')),
 'textvariable': ('textvariable', 'textVariable', 'Variable', '', ''),
 'underline': ('underline', 'underline', 'Underline', -1, -1),
 'width': ('width', 'width', 'Width', 0, 0),
 'wraplength': ('wraplength',
                'wrapLength',
                'WrapLength',
                <pixel object at 00C50908>,
                <pixel object at 00C50908>)}
Answered By: Anurag Uniyal

Answer #2:

To get all attributes of a widget from cget, you can use keys() to get the attributes and then cget to get the value of those atributes. IE:

    from tkinter import *
    root=Tk()
    w=Button(root)
    for item in w.keys():
        print(item)
        print(w.cget(item))

This code returns:

    activebackground
    systemButtonFacePressed
    activeforeground
    systemPushButtonPressedText
    anchor
    center
    background
    White
    bd
    2
    bg
    White
    bitmap

    borderwidth
    2
    command

    compound
    none
    cursor

    default
    disabled
    disabledforeground
    #a3a3a3
    fg
    systemButtonText
    font
    TkDefaultFont
    foreground
    systemButtonText
    height
    0
    highlightbackground
    White
    highlightcolor
    systemButtonFrame
    highlightthickness
    4
    image

    justify
    center
    overrelief

    padx
    12
    pady
    3
    relief
    flat
    repeatdelay
    0
    repeatinterval
    0
    state
    normal
    takefocus

    text

    textvariable

    underline
    -1
    width
    0
    wraplength
    0

That was a lot of spaces >.<

In this block the first is the key and the second is the value of said key. The keys method (for all widgets) returns all of the keys in said widget. Config returns the keys and what they apply to (cursor vs Cursor) where keys just gives a list of all attributes.

Answered By: Evan Quiney

Leave a Reply

Your email address will not be published.