1

疑问如下,我想使用tkcalendar库选择一个日期,它选择正确,但我不能在函数外使用变量。

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变量以将其显示在 aLabel中,如下所示:

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时,它会显示我正确选择的日期。

4

2 回答 2

0

从谷歌搜索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)
于 2021-03-27T19:51:59.370 回答
0

您没有textvariable-正确使用该选项。您需要将其设置为对tk.StringVar变量类实例的引用。之后对变量值的任何更改都会自动更新小部件显示的内容。

另请注意,该tkcalendar.DateEntry.get_date()方法返回 a ,而不是字符串,因此在将' 值datetime.date设置为它之前,您需要自己手动将其转换为一个。StringVar

这是一个可运行的示例,说明了我在说什么:

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()
于 2021-03-27T21:58:23.810 回答