Можно ли получить настройки виджета в Tkinter?

было бы здорово, если бы я мог получить что-то вроде ниже.

Псевдо Код:

U = widget1.SettingsGet()
Print U 

при печати U что-то вроде этого будет возвращено:

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

было бы очень полезно иметь возможность получить настройки виджетов. Так что я могу манипулировать другими виджетами соответственно.

2 ответов


почему вам нужны все настройки сразу в одном словаре, в любом случае вам придется получить доступ к определенной настройке из этого словаря настроек, поэтому вместо этого просто используйте cget метод для получения значений, например

from Tkinter import *

root = Tk()

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

Он будет печатать

Hello, world!

если вы хотите знать все имеющиеся варианты, виджет.config содержит config и от этого, если вы хотите, вы можете создать набор настроек, которые вам могут понадобиться например,

import pprint
from Tkinter import *

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

выход:

{'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>)}

чтобы получить все атрибуты виджета из cget, вы можете использовать keys() для получения атрибутов, а затем cget для получения значения этих атрибутов. Т. е.:

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

этот код возвращает:

    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

это было много пробелов >.

в этом блоке первый является ключом, а второй-значением указанного ключа. Метод keys (для всех виджетов) возвращает все ключи в указанном виджете. Config возвращает ключи и то, к чему они применяются (курсор против Курсора) , где ключи просто дает список всех атрибутов.