如何在外部变量中保存值?
How do I save a value in an external variable?
疑惑如下,我想 select 使用 tkcalendar
库的日期,select 编辑正确,但我不能在函数外使用变量。
def dateentry_view():
def print_sel():
date = cal.get_date()
print(date)
top = tk.Toplevel(root)
ttk.Label(top, text='Elige el día').pack()
cal = DateEntry(top)
cal.pack(padx=10, pady=10)
ttk.Button(top, text="Aceptar", command=print_sel).pack()
如何传递 date
变量以在 Label
中显示它,如下所示:
labelDate = Label(root,textvariable=date)
我已经尝试将 Label
放入函数中,但它仍然没有显示 date
变量。
def dateentry_view():
top = tk.Toplevel(root)
ttk.Label(top, text='Elige el día').pack()
cal = DateEntry(top)
cal.pack(padx=10, pady=10)
ttk.Button(top, text="Aceptar", command=print_sel).pack()
def print_sel():
date = cal.get_date()
print(date)
labelFecha = Label(root,textvariable=date)
当我打印 date
时,它会显示我 select 编辑正确的日期。
从谷歌搜索 tk.Label
看来 textvariable
的想法是它指的是可变的 tk.StringVar
,而不是正常的 Python str
(这是不可变的)。因此,您需要做的就是在外部作用域中声明 StringVar
,然后在回调中更新它:
date = tk.StringVar()
def set_date():
date.set(cal.get_date())
ttk.Button(top, text="Aceptar", command=set_date).pack()
labelFecha = Label(root, textvariable=date)
您没有正确使用 textvariable-
选项。您需要将其设置为对 tk.StringVar
变量 class 实例的引用。之后对变量值的任何更改都会自动更新小部件显示的内容。
另请注意,tkcalendar.DateEntry.get_date()
方法 returns 是一个 datetime.date
,不是字符串,因此在设置 [=15= 之前,您需要手动将其转换为字符串]的价值。
这里有一个可运行的例子来说明我在说什么:
import tkinter as tk
import tkinter.ttk as ttk
from tkcalendar import DateEntry
def dateentry_view():
def print_sel():
date = cal.get_date() # Get datetime.date.
fechaStr = date.strftime('%Y-%m-%d') # Convert datetime.date to string.
fechaVar.set(fechaStr) # Update StringVar with formatted date.
top.destroy() # Done.
top = tk.Toplevel(root)
ttk.Label(top, text='Elige el día').pack()
cal = DateEntry(top)
cal.pack(padx=10, pady=10)
ttk.Button(top, text="Aceptar", command=print_sel).pack()
root = tk.Tk()
ttk.Button(root, text="Ejecutar prueba", command=dateentry_view).pack()
fechaVar = tk.StringVar(value='<no date>') # Create and initialize control variable.
labelFecha = tk.Label(root, textvariable=fechaVar) # Use it.
labelFecha.pack()
root.mainloop()
疑惑如下,我想 select 使用 tkcalendar
库的日期,select 编辑正确,但我不能在函数外使用变量。
def dateentry_view():
def print_sel():
date = cal.get_date()
print(date)
top = tk.Toplevel(root)
ttk.Label(top, text='Elige el día').pack()
cal = DateEntry(top)
cal.pack(padx=10, pady=10)
ttk.Button(top, text="Aceptar", command=print_sel).pack()
如何传递 date
变量以在 Label
中显示它,如下所示:
labelDate = Label(root,textvariable=date)
我已经尝试将 Label
放入函数中,但它仍然没有显示 date
变量。
def dateentry_view():
top = tk.Toplevel(root)
ttk.Label(top, text='Elige el día').pack()
cal = DateEntry(top)
cal.pack(padx=10, pady=10)
ttk.Button(top, text="Aceptar", command=print_sel).pack()
def print_sel():
date = cal.get_date()
print(date)
labelFecha = Label(root,textvariable=date)
当我打印 date
时,它会显示我 select 编辑正确的日期。
从谷歌搜索 tk.Label
看来 textvariable
的想法是它指的是可变的 tk.StringVar
,而不是正常的 Python str
(这是不可变的)。因此,您需要做的就是在外部作用域中声明 StringVar
,然后在回调中更新它:
date = tk.StringVar()
def set_date():
date.set(cal.get_date())
ttk.Button(top, text="Aceptar", command=set_date).pack()
labelFecha = Label(root, textvariable=date)
您没有正确使用 textvariable-
选项。您需要将其设置为对 tk.StringVar
变量 class 实例的引用。之后对变量值的任何更改都会自动更新小部件显示的内容。
另请注意,tkcalendar.DateEntry.get_date()
方法 returns 是一个 datetime.date
,不是字符串,因此在设置 [=15= 之前,您需要手动将其转换为字符串]的价值。
这里有一个可运行的例子来说明我在说什么:
import tkinter as tk
import tkinter.ttk as ttk
from tkcalendar import DateEntry
def dateentry_view():
def print_sel():
date = cal.get_date() # Get datetime.date.
fechaStr = date.strftime('%Y-%m-%d') # Convert datetime.date to string.
fechaVar.set(fechaStr) # Update StringVar with formatted date.
top.destroy() # Done.
top = tk.Toplevel(root)
ttk.Label(top, text='Elige el día').pack()
cal = DateEntry(top)
cal.pack(padx=10, pady=10)
ttk.Button(top, text="Aceptar", command=print_sel).pack()
root = tk.Tk()
ttk.Button(root, text="Ejecutar prueba", command=dateentry_view).pack()
fechaVar = tk.StringVar(value='<no date>') # Create and initialize control variable.
labelFecha = tk.Label(root, textvariable=fechaVar) # Use it.
labelFecha.pack()
root.mainloop()