Is it possible to get widget settings in Tkinter?
Asked Answered
K

3

22

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.

Kyrakyriako answered 11/7, 2010 at 4:55 Comment(0)
C
40

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>)}
Compare answered 11/7, 2010 at 5:40 Comment(0)
H
8

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.

Hinojosa answered 25/8, 2015 at 11:29 Comment(0)
L
0

It probably shouldn't be in production code since it makes use of _tkinter, but you can do:

import tkinter as tk
import _tkinter

def con_dict(w):
    options = {}
    for i in w.keys():
        value = w.cget(i)
        options[i] = value.string if type(value) is _tkinter.Tcl_Obj else value
    return options

root = tk.Tk()
widget = tk.Label(
    root, text='test', relief='raised', borderwidth=3)
widget.pack()
print(con_dict(widget))
root.mainloop()

which outputs for me:

{'activebackground': 'SystemButtonFace', 'activeforeground': 'SystemButtonText', 'anchor': 'center', 'background': 'SystemButtonFace', 'bd': 3, 'bg': 'SystemButtonFace', 'bitmap': '', 'borderwidth': 3, 'compound': 'none', 'cursor': '', 'disabledforeground': 'SystemDisabledText', 'fg': 'SystemButtonText', 'font': 'TkDefaultFont', 'foreground': 'SystemButtonText', 'height': 0, 'highlightbackground': 'SystemButtonFace', 'highlightcolor': 'SystemWindowFrame', 'highlightthickness': 0, 'image': '', 'justify': 'center', 'padx': 1, 'pady': 1, 'relief': 'raised', 'state': 'normal', 'takefocus': '0', 'text': 'test', 'textvariable': '', 'underline': -1, 'width': 0, 'wraplength': 0}

Laliberte answered 11/6, 2023 at 10:51 Comment(2)
what is your operative system ? I hoped to get the default color names like in your list, but on Ubuntu 23.04 using Python 3.11.4 launching the code you posted the colors are : 'activebackground': '#ececec', 'activeforeground': '#000000', 'background': '#d9d9d9', 'bg': '#d9d9d9', 'disabledforeground': '#a3a3a3', 'fg': '#000000', 'foreground': '#000000', 'highlightbackground': '#d9d9d9', 'highlightcolor': '#000000'Reentry
@JackGriffin the output was produced on windows11. Not all colors are named colorsLaliberte

© 2022 - 2024 — McMap. All rights reserved.