记录tkinter变量的名称

时间:2019-04-27 22:44:29

标签: python-3.x logging tkinter

我正在向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 :(得分:0)

您可以在tkinter Variable类对象上使用name kwarg。

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