Запись имени переменной tkinter - PullRequest
0 голосов
/ 28 апреля 2019

Я добавляю некоторую функцию регистрации в мое приложение tkinter. В идеале функция сообщает имя переменной, которую она изменила, и значение, на которое она была изменена. Ниже приведен соответствующий код.

Здесь объявляются переменные экземпляра, которые я использую:

## priorityLevel
self.rbPriorityValue          = StringVar()
self.rbPriority               = None
self.rbMinor                  = None

Это устанавливает значения всего:

self.rbPriority = ttk.Radiobutton(cf, text="Priority", variable=self.rbPriorityValue, value="priority",
                                  command=lambda: self.rbValueChanged(self.rbPriorityValue, self.rbPriority))
self.rbPriority.grid(row=21, column=0, sticky="w", padx=(indent, 0))
self.rbMinor = ttk.Radiobutton(cf, text="Minor", variable=self.rbPriorityValue, value="minor",
                               command=lambda: self.rbValueChanged(self.rbPriorityValue, self.rbMinor))
self.rbMinor.grid(row=22, column=0, sticky="w", padx=(indent, 0))

Это функция регистрации:

def rbValueChanged(self, radioValue, modifiedWidget):
    print("The value of %s is:" % radioValue.__str__(), end="\t\t")
    print(modifiedWidget.cget("value"))
#end rbValueChanged

Когда я выбираю переключатель, функция регистрации печатает «PY_VAR25» вместо «rbPriorityValue». Есть ли способ вернуть это, или PY_VAR25 - лучшее, что я могу получить?

1 Ответ

0 голосов
/ 28 апреля 2019

Вы можете использовать name kwarg для объекта класса tkinter Variable.

a_variable = StringVar(name="variable A")

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

import tkinter as tk
import logging

logging.basicConfig(level=logging.DEBUG)

def button_press(var):
    log_entry = f'variable name: {var}, value: {var.get()}'
    logging.debug(log_entry)
    # print(log_entry)


root = tk.Tk()

a_variable = tk.StringVar(value='A', name="variable A")
tk.Button(text='press A', command=lambda var=a_variable: button_press(var)).pack()

b_variable = tk.StringVar(value='B', name="variable B")
tk.Button(text='press B', command=lambda var=b_variable: button_press(var)).pack()

root.mainloop()

выход:

нажмите A: DEBUG:root:variable name: variable A, value: A
нажмите B: DEBUG:root:variable name: variable B, value: B

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