我正在向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?
答案 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