привязать StringVar к виджету Entry - PullRequest
1 голос
/ 23 мая 2019

Я пишу простую программу с графическим интерфейсом, и мне нужно загрузить значения по умолчанию из INI-файла.Я дал имена виджету Entry и могу получить его методом nametowidget.

Однако я не могу найти способ получить доступ к StringVar, привязанному к виджету ввода, и обновить его значение.Используя отладчик, я вижу, что у объектов StringVar нет мастера tkinter, и они не появляются ни в каких дочерних элементах виджета.Так возможно ли то, что я пытаюсь сделать?Или есть обходной путь?

Ниже приведена соответствующая функция.

def load_data(data_file):
    """
    Read an ini file and update related values
    :param data_file:
    :return:
    """
    conf = configparser.ConfigParser()
    try:
        conf.read(data_file)
        for section in conf.sections():
            try:
                container = SECTIONS[section]
                for key in conf[section]:
                    widget = container.nametowidget(key)
                    widget.set(conf[section][key])
            except KeyError:
                pass
    except configparser.Error as e:
        print(e)

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Виджеты Tkinter имеют метод getvar и setvar, который можно использовать для получения и установки значения переменной по ее имени.

Вы можете получить имя переменной, связанной с виджетом, используя метод cget.

Пример:

var = tk.IntVar()
entry = tk.Entry(..., textvariable=var)
...
varname = entry.cget("textvariable")
value = entry.getvar(varname)
entry.setvar(varname, value+1)
1 голос
/ 23 мая 2019

Вы можете получить доступ к StringVar, связанному с виджетом, с помощью widget["textvariable"].

import tkinter as tk

root = tk.Tk()

a = tk.StringVar()
a.set(0)

b = tk.Entry(root,textvariable=a)
b.pack()

print (b["textvariable"])

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...